Ios &引用;推出;然后放下一个视图
上图说明了我想要的:Ios &引用;推出;然后放下一个视图,ios,swift,uiview,uibezierpath,uidynamicanimator,Ios,Swift,Uiview,Uibezierpath,Uidynamicanimator,上图说明了我想要的: 红色圆圈是UIView的起点 我想把它向上发射(Y位置),改变X位置 我想让它落在边界之内 我尝试的是: 对于启动,我可以使用UIView.animate函数。对于下降,我可以使用UIDynamicAnimator。但也存在一些问题: -在UIView.animate中,我不能“弯曲”动画,只能是一条直线。我可以用这个答案画一条曲线: -将这两种功能结合起来是行不通的。完成UIView.animate后,UIView将直接向下放置 UIDynamicMator的代码:
- 红色圆圈是UIView的起点
- 我想把它向上发射(Y位置),改变X位置
- 我想让它落在边界之内
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位置并保持添加的行为?我认为您需要的是行为。添加此额外行为
let push = UIPushBehavior(items: [view2], mode: UIPushBehaviorMode.instantaneous)
push.setAngle(CGFloat(-M_PI/2 - 0.1), magnitude: 8.0) // Adjust angle and magnitude
animator.addBehavior(push)
是的,我认为这是个好方法。我可以在22小时内接受