[英]Throwing paper/ball effect animation in Swift UIKit
在 UIKit 中創建投擲紙/球效果動畫的最佳方法是什么?
我需要的基本上是一個從point A
開始到Point B
point A
結束的投擲效果。 我不需要任何彈跳效果,這更像是一種讓用戶知道從point A
到Point B
point A
添加了一些東西的效果; 類似於我們在照片中將照片添加到相冊時獲得的效果。
我一直在玩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
}
}
)
}
這是使用matt
建議的三次插值動畫實現三點后的最終代碼。
@IBAction func startAnimation(_ sender: Any) {
UIView.animateKeyframes(withDuration: 3.0, delay: 0.0, options: [.calculationModeCubic], animations: {
// start
UIView.addKeyframe(withRelativeStartTime: 0, relativeDuration: 1.0/5.0, animations: {
self.myView.center = CGPoint(x: self.pointA.center.x, y: self.pointA.center.y)
})
// apex
UIView.addKeyframe(withRelativeStartTime: 1.0/5.0, relativeDuration: 1.0/5.0, animations: {
self.myView.center = CGPoint(x: self.pointB.center.x - 100, y: self.pointB.center.y - 100)
})
// end
UIView.addKeyframe(withRelativeStartTime: 2.0/5.0, relativeDuration: 1.0/5.0, animations: {
self.myView.center = CGPoint(x: self.pointB.center.x, y: self.pointB.center.y)
})
}
)
}
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.