【发布时间】:2020-11-23 16:31:11
【问题描述】:
在 UIKit 中创建投掷纸/球效果动画的最佳方法是什么?
我需要的基本上是一个从point A开始到Point B结束的投掷效果。我不需要任何弹跳效果,这更多的是让用户知道从point A 到Point B 添加了一些东西;类似于我们将照片添加到相册中的相册时得到的效果。
我一直在玩animateKeyframes,但我不能完全得到我想要的效果,我没有得到曲线路径,我无法改变速度,所以效果看起来不真实。
@IBAction func startAnimation(_ sender: Any) {
UIView.animateKeyframes(withDuration: 1.0, delay: 0.0, options: [], animations: {
var startTime = 0.0
var viewScale:CGFloat = 1.0
for i in 0..<5{
UIView.addKeyframe(withRelativeStartTime: startTime, relativeDuration: 0.25, animations: {
self.myView.center = CGPoint(x: self.myView.center.x + 10, y: self.myView.center.y - 20)
self.myView.transform = CGAffineTransform(scaleX: viewScale, y: viewScale)
})
startTime += 0.1
viewScale += 0.01
}
for i in 0..<5{
UIView.addKeyframe(withRelativeStartTime: startTime, relativeDuration: 0.25, animations: {
self.myView.center = CGPoint(x: self.myView.center.x + 10, y: self.myView.center.y + 5)
self.myView.transform = CGAffineTransform(scaleX: viewScale, y: viewScale)
})
startTime += 0.1
viewScale -= 0.01
}
}
)
}
【问题讨论】:
-
“什么是最好的方法”非常广泛和模糊。你可以说得更详细点吗?您显示的代码有什么问题? (我的猜测是:是动画没有走弯路。但最好是清楚一点。)
-
是的,我没有得到曲线路径,所以效果看起来不真实。另外,对于
animateKeyframes,我找不到改变速度以使其更真实的方法。换句话说,我不确定animateKeyframes是否是此类动画的最佳工具。我已经更新了我原来的问题。 -
嗯,我可以想到三种方法:(1)三点关键帧和三次插值; (2) 弹跳动画; (3) UIKit 动力学。
-
好的,我会研究所有选项,尤其是三次插值的三点。尽管出于某种原因我需要核心动画。
-
给出答案,见下文。