如何使用UView.animate创建U形动画? -迅捷

时间:2019-12-02 20:18:04

标签: ios swift animation

如何使用UIView.animate快速制作U形动画?我正在尝试将舍入后的图像设置为动画UIView的中间部分,但是我只得到了只能直线移动的动画。我希望它先下来然后停在UIView的中间。 我尝试使用此代码:

UIView.animate(withDuration: 1, delay: 0, usingSpringWithDamping: 0.7, initialSpringVelocity: 1, options: .curveEaseIn, animations: {
   infoImage.center.y += 15
   infoImage.center.x = animationView.frame.size.width / 2
})

动画外观的屏幕截图:

enter image description here

1 个答案:

答案 0 :(得分:1)

您需要使用CAKeyFrameAnimation,它具有path属性,该属性将用作动画的基础。您可以使用贝塞尔曲线路径定义U形。

这是一个简单的示例,说明如何对视图输入到屏幕上进行动画处理

class MyVC {
   var movingView = UIView()
   let endPoint = CGPoint(x: mainView.frame.width * 2/3, y: 200)

   func animateViewEntry() {
      movingView = UIView(frame: CGRect(-100,-100,100,100)) //intially off-screen
      movingView.backgroundColor = .red
      view.addSubview(movingView)
      let animation = CAKeyframeAnimation(keyPath: "position")
      let path = UIBezierPath()
      path.move(to: CGPoint(x:-movingView.frame.width, y:50))
      path.addQuadCurve(to: endPoint,
                        controlPoint:  CGPoint(x:mainView.frame.width * 1/3, y: 350))
      animation.path = path.cgPath
      animation.duration = 2
      animation.fillMode = .forwards
      animation.isRemovedOnCompletion = false
      movingView.layer.add(animiation, forKey: "Bounce")
   }
}

我对如何使视图在图层动画结束时保持其最终位置感到不满意,因为它不是100%无缝的。我知道使用委托不是我以前的工作方式,但是我不记得自己以前做过的事情,而且我现在没有时间玩。希望其他人会提供更新吗?

已编辑:已更新以删除委托方法并替换为.fillMode = .forwards,这是我当时想不到的!