菜鸟教程小白 发表于 2022-12-12 16:07:27

ios - UIDynamics : Spring


                                            <p><p>我正在尝试在我正在开发的 <code>iOS</code> 应用程序中创建一些动画。我有一个盒子会掉下来,直到它撞到一个酒吧。我还在方框中添加了一个 <code>bounce</code> 以对栏产生影响。我现在要添加的是杆上的一种行为,因此当盒子碰到杆时, react 是轻微的 Spring 。我尝试添加 <code>UIAttachmentBehavior</code> 但无法弄清楚如何正确实现它。我看过 <code>WWDC</code> 视频和其他视频,但我无法让它在此设置中工作。如果你能在这个例子中告诉我如何实现它,那就太好了。</p>

<p> <img src="/image/ppc6D.png" alt="enter image description here"/> </p>

<pre><code>@implementation ViewController

- (void)viewDidLoad
{
    ;
    // Do any additional setup after loading the view, typically from a nib.
    _mainView = [ initWithFrame:[ bounds]];
    ];
    [ addSubview: _mainView];

    _objectView =
   [ initWithFrame:CGRectMake(_mainView.bounds.size.width/2-40, 40,
                                              80, 80)];
    ];
    ;

    _barView =
   [ initWithFrame:CGRectMake(_mainView.bounds.size.width/2-50,
                                              (_mainView.bounds.size.height/5) * 4,
                                              100, 3)];
    ];
    ;

    //----------------------------------

    _animator = [ initWithReferenceView:_mainView];

    BounceCustomBehavior *bouncyBehavior =
   [
                     initWithItems:@
                            objects:];
    ;

    //-----------------------------------


}
</code></pre>

<hr/>

<pre><code>#import &#34;BounceCustomBehavior.h&#34;

@implementation BounceCustomBehavior
-(instancetype)initWithItems:(NSArray *)items objects:(NSArray *)collisionObjs {
    if (!(self = )) return nil;

    UIGravityBehavior* gravityBehavior = [ initWithItems:items];
    ;

    UICollisionBehavior* collisionBehavior = [ initWithItems:items];
    collisionBehavior.translatesReferenceBoundsIntoBoundary = YES;

    for (UIView * view in collisionObjs) {
      CGPoint rightEdge = CGPointMake(view.frame.origin.x +
                                        view.frame.size.width, view.frame.origin.y);
      [collisionBehavior addBoundaryWithIdentifier:@&#34;&#34;
                                    fromPoint:view.frame.origin
                                    toPoint:rightEdge];
    }
    ;

    UIDynamicItemBehavior *elasticityBehavior = [ initWithItems:items];
    elasticityBehavior.elasticity = 0.3f;
    ;

    return self;
}
@end
</code></pre></p>
                                    <br><hr><h1><strong>Best Answer-推荐答案</ strong></h1><br>
                                            <p><p>虽然附件行为非常强大,但我首先建议您尝试将行附加到 <a href="https://developer.apple.com/library/ios/documentation/UIKit/Reference/UISnapBehavior_Class/Reference/Reference.html" rel="noreferrer noopener nofollow">snap behavior</a>看看它是否适合你。通常,您需要几种依恋行为(通常是 4 种)来稳定元素。 Snap 通过一个通常更易于使用的行为来提供类似的效果。</p>

<p>作为一个单独的问题,您错误地设置了碰撞。只需将所有 View 添加到碰撞行为中(使用 <code>addItem:</code>)。你不需要创建一堆边界。</p></p>
                                   
                                                <p style="font-size: 20px;">关于ios - UIDynamics : Spring,我们在Stack Overflow上找到一个类似的问题:
                                                        <a href="https://stackoverflow.com/questions/19706106/" rel="noreferrer noopener nofollow" style="color: red;">
                                                                https://stackoverflow.com/questions/19706106/
                                                        </a>
                                                </p>
                                       
页: [1]
查看完整版本: ios - UIDynamics : Spring