Spring Animation 是一種特殊的動(dòng)畫曲線,自從 iOS 7 開始被廣泛應(yīng)用在系統(tǒng)動(dòng)畫中。
下圖中演示的系統(tǒng)自帶的動(dòng)畫效果,都使用了 Spring Animation:
事實(shí)上,從 iOS 7 起幾乎所有的系統(tǒng)動(dòng)畫都用的是 Spring Animation,包括 App 文件夾打開/關(guān)閉效果、鍵盤彈出效果、UISwitch 控件的開關(guān)效果、不同 View Controller 之間的 Push 動(dòng)畫、Modal 出現(xiàn)和消失的動(dòng)畫、Siri 的出現(xiàn)和消失動(dòng)畫,等等。下圖為 Spring Animation 和普通的動(dòng)畫的運(yùn)動(dòng)曲線的對(duì)比:
為了更加直觀,我做了一組演示圖,從左至右分別列出了 Spring Animation, Ease-Out Animation 和 Linear Animation 的動(dòng)畫效果:
可以看到,和系統(tǒng)自帶的 ease-out 效果相比,Spring Animation 前期速度增加得更快,在動(dòng)畫時(shí)間一定的前提下,給人感覺更加快速、干凈。
Spring Animation API
自 iOS 8 開始,Apple 公開了 Spring Animation 的 API,開發(fā)者也可以使用簡(jiǎn)單的代碼創(chuàng)建這類動(dòng)畫效果了:
+(void)animateWithDuration:(NSTimeInterval)durationdelay:(NSTimeInterval)delayusingSpringWithDamping:(CGFloat)dampingRatioinitialSpringVelocity:(CGFloat)velocityoptions:(UIViewAnimationOptions)optionsanimations:(void(^)(void))animationscompletion:(void(^)(BOOLfinished))completion
該方法是UIView的類方法。
Spring Animation 的 API 和一般動(dòng)畫相比多了兩個(gè)參數(shù),分別是usingSpringWithDamping和initialSpringVelocity。
usingSpringWithDamping 參數(shù)
usingSpringWithDamping的范圍為0.0f到1.0f,數(shù)值越小「彈簧」的振動(dòng)效果越明顯。下圖演示了在initialSpringVelocity為0.0f的情況下,usingSpringWithDamping分別取0.2f,0.5f和1.0f的情況。
initialSpringVelocity 參數(shù)
initialSpringVelocity則表示初始的速度,數(shù)值越大一開始移動(dòng)越快。下圖演示了在usingSpringWithDamping為1.0f時(shí),initialSpringVelocity分別取5.0f,15.0f和25.0f的情況。值得注意的是,初始速度取值較高而時(shí)間較短時(shí),也會(huì)出現(xiàn)反彈情況。
使用
Spring Animation 是線性動(dòng)畫或 ease-out 動(dòng)畫的理想替代品。由于 iOS 本身大量使用的就是 Spring Animation,用戶已經(jīng)習(xí)慣了這種動(dòng)畫效果,因此使用它能使 App 讓人感覺更加自然,用 Apple 的話說就是「instantly familiar」。此外,Spring Animation 不只能對(duì)位置使用,它適用于所有可被添加動(dòng)畫效果的屬性。