Swift-基本動畫
最簡單的動畫效果
(兩個參數)
UIView.animate(withDuration: Float, animations: ()->() )
- withDuration:動畫的持續時間
- animations:要做什麼動畫
1.5秒間把myImageView向下移動400向右移動200,
慢慢變成完全透明,並且放大兩倍
UIView.animate(withDuration: 1.5) {
self.myImageView.frame.origin.y += 400
self.myImageView.frame.origin.x += 200
self.myImageView.alpha = 0
self.myImageView.transform = CGAffineTransform(scaleX: 2.0, y: 2.0)
}較完整的動畫效果
(五個參數)
UIView.animate(
withDuration: 1.5,
delay: 0.5,
options: [],
animations: () -> (),
completion: (Bool) -> Void
)
- delay:延遲時間
- options:動畫選項
- completion:動畫結束後
先在viewDidLoad中改變位子
在UIView.animate中設定回原來位子
override func viewDidLoad() {
super.viewDidLoad()
self.myImageView.transform = CGAffineTransform(translationX: 50, y: 200)
}
@IBAction func animate(_ sender: UIButton) {
UIView.animate(withDuration: 1.5, delay: 0.5, options: [], animations: {
self.myImageView.transform = CGAffineTransform.identity
}, completion: nil)
}options: []
- .curveEaseIn 慢進
- .curveEaseOut 慢出
- .curveEaseInOut 慢進慢出
- .curveLinear 速度一致
- .autoreverse 倒著播放
- .repeat 重複
- …
completion: (Bool) -> Void
- 動畫結束後要做什麼事情
- 在裡面再寫一個UIView.animate 做新的動畫
- 動畫完成讓view消失 — removeFromSuperview()
- 動畫完成讓view回到原點 — CGAffineTransform.identity
viewDidLoad中改變位子
在UIView.animate中設定回原來位子
在動畫結束之後做放大兩倍的動畫
UIView.animate(withDuration: 1.5, delay: 0.5, options: [], animations: {self.myImageView.transform = CGAffineTransform.identity})
{
if $0
{
UIView.animate(withDuration: 2){self.myImageView.transform = CGAffineTransform(scaleX: 2.0, y: 2.0)}
}
}彈性動畫(彈簧效果)
(七個參數)
UIView.animate(
withDuration: TimeInterval,
delay: TimeInterval,
usingSpringWithDamping: CGFloat,
initialSpringVelocity: CGFloat,
options: UIViewAnimationOptions,
animations: () -> Void,
completion: (Bool) -> Void
)
- usingSpringWithDamping: 彈性的阻尼係數 — 0~1越接近0彈力越大
- initialSpringVelocity: 彈性動畫的初始數度 — 0~1越接近0速度越快
UIView.animate(withDuration: 1.5, delay: 0.3, usingSpringWithDamping: 0.3, initialSpringVelocity: 0.3, options: [], animations: {
self.myImageView.transform = CGAffineTransform(translationX: 50, y: 300)
}){
if $0
{
UIView.animate(withDuration: 1){
self.myImageView.transform = CGAffineTransform.identity}
}
}