iOS, Swiftでのアニメーションについて(1)

表現力をアップさせたいので、標準で用意されているアニメーション関数を見なおし。 初回は、お馴染みのUIViewの以下クラスメソッドを調べてみた。

extension UIView {
    public class func animateWithDuration(duration: NSTimeInterval, delay: NSTimeInterval, options: UIViewAnimationOptions, animations: () -> Void, completion: ((Bool) -> Void)?)
    public class func animateWithDuration(duration: NSTimeInterval, animations: () -> Void, completion: ((Bool) -> Void)?) 
    public class func animateWithDuration(duration: NSTimeInterval, animations: () -> Void) // delay = 0.0, options = 0, completion = NULL
    public class func animateWithDuration(duration: NSTimeInterval, delay: NSTimeInterval, usingSpringWithDamping dampingRatio: CGFloat, initialSpringVelocity velocity: CGFloat, options: UIViewAnimationOptions, animations: () -> Void, completion: ((Bool) -> Void)?)

お手軽にアニメーションさせるなら、このメソッドという印象。 設定できるoptionsは4種類とやや表現力には欠ける。

CurveEaseInOut // 最初と最後がゆっくり
CurveEaseIn // 最初がゆっくり
CurveEaseOut //最後がゆっくり
CurveLinear // 一定

この中でも、iOS7から使用できるようになった以下のメソッドは他とは毛並みが違う。 こちらは引数名からも予測できるように、簡単にバネの動きをつけることができる。

animateWithDuration(duration: NSTimeInterval, delay: NSTimeInterval, usingSpringWithDamping dampingRatio: CGFloat, initialSpringVelocity velocity: CGFloat, options: UIViewAnimationOptions, animations: () -> Void, completion: ((Bool) -> Void)?)

dampingRatioには0〜1の数字を渡す。 1に近づくほどバネらしさが失われ、0に近づくほどバネらしく弾むといったあんばい。 initialSpringVelocityは、 UIView.animateWithDurationのinitialSpringVelocityについて - Qiita にも書いてあるが、いまいちわからない。 しかし、0を代入しておいても期待の動きにはなるので、僕は盲目的に0を設定しています。