8

すべてのサブビューに AutoLayout を使用するように InterfaceBuilder で構成された ViewController があります。レイアウトはうまく機能しています。

UIDynamicAnimator が提供するクールな重力効果を使用して、サブビューの 1 つをバウンスさせたいと考えています。AutoLayout でうまくいくとは思いませんでしたが、試してみたところうまくいきました。それはかなりうまくいきます!

私の質問は、これは予想される動作ですか? どこかで問題を起こすのでしょうか?Apple は、AutoLayout と UIDynamicAnimators の組み合わせに関するガイダンスを提供していますか?

興味のある人のためのコードは次のとおりです。

    var boundaryFrame = self.buttonBackgroundView.frame
    boundaryFrame = CGRect(x: 0,
        y: boundaryFrame.origin.y + (boundaryFrame.height + 1),
        width: self.view.frame.width,
        height: 2)

    self.animator = UIDynamicAnimator(referenceView: self.view)
    var gravity = UIGravityBehavior(items: [self.buttonBackgroundView])
    gravity.magnitude = 0.5

    var collision = UICollisionBehavior(items: [self.buttonBackgroundView])
    var boundaryId: NSMutableString = NSMutableString(string: "bottomBoundary")
    let boundaryPath = UIBezierPath(rect: boundaryFrame)
    collision.addBoundaryWithIdentifier(boundaryId, forPath: boundaryPath)

    let bounceProperties = UIDynamicItemBehavior(items: [self.buttonBackgroundView])
    bounceProperties.elasticity = 0.5

    // Move it up before causing it to bounce down to its original location
    self.setMeUpTopConstraint.constant = 10
    self.view.setNeedsUpdateConstraints()
    self.view.layoutIfNeeded()

    // Start animating
    animator.addBehavior(gravity)
    animator.addBehavior(collision)
    animator.addBehavior(bounceProperties)
4

2 に答える 2

0

はい、UIDynamicAnimator は AutoLayout で正常に動作します。UIDynamicAnimator に大きく依存し、制約を使用するアプリがあり、正常に動作しました。私が見つけた唯一の問題は、UIView animateWithDuration が制約で機能しないことですが、そのメソッドはとにかく UIDynamicAnimator ではうまく機能しません。それが役に立てば幸い :)

于 2015-02-12T02:04:05.347 に答える