すべてのサブビューに 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)