上图说明了我想要的:
- 红圈是一个 UIView 的起点
- 我想通过改变 X 位置向上启动它(Y 位置)
- 我想让它落在界限内。
我尝试了什么:
对于启动,我可以使用 UIView.animate 函数。对于 drop,我可以使用 UIDynamicAnimator。但是也存在一些问题:
- 在 UIView.animate 我不能“弯曲”动画,只能是一条直线。我可以在这里使用这个答案来绘制曲线:https ://stackoverflow.com/a/43813458/7715250
- 结合这两个功能是行不通的。UIView.animate 完成后,UIView 直接向下下降。
UIDynamicAnimator 的代码:
var animator: UIDynamicAnimator!
//view did appear
let view2 = UIView(frame: CGRect(x: 0, y: 0, width: 100, height: 100))
view2.center = self.view.center
view2.backgroundColor = .blue
self.view.addSubview(view2)
animator = UIDynamicAnimator(referenceView: self.view)
let gravity = UIGravityBehavior(items: [view2])
animator.addBehavior(gravity)
let collosion = UICollisionBehavior(items: [view2])
collosion.translatesReferenceBoundsIntoBoundary = true
let dynamic = UIDynamicItemBehavior(items: [view2])
dynamic.elasticity = 0.7
animator.addBehavior(collosion)
animator.addBehavior(dynamic)
这将使 UIView 具有很好的反弹效果。但是如何启动 UIView?如何更改 X 和 Y 位置并保持添加的行为?