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位置
  • 我想让它落在边界之内
我尝试的是:

对于启动,我可以使用UIView.animate函数。对于下降,我可以使用UIDynamicAnimator。但也存在一些问题:

-在UIView.animate中,我不能“弯曲”动画,只能是一条直线。我可以用这个答案画一条曲线:

-将这两种功能结合起来是行不通的。完成UIView.animate后,UIView将直接向下放置

UIDynamicMator的代码:

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小时内接受