1

在此处输入图像描述

上图说明了我想要的:

  • 红圈是一个 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 位置并保持添加的行为?

4

1 回答 1

3

我认为你需要的是 UIPushBehavior。添加这个额外的行为。

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)
于 2017-08-30T17:05:56.673 回答