Spring Animation 是一種特殊的動(dòng)畫曲線北苟,自從 iOS 7 開(kāi)始被廣泛應(yīng)用在系統(tǒng)動(dòng)畫中。
下圖中演示的系統(tǒng)自帶的動(dòng)畫效果班缰,都使用了 Spring Animation:
事實(shí)上法梯,從 iOS 7 起幾乎所有的系統(tǒng)動(dòng)畫都用的是 Spring Animation,包括 App 文件夾打開(kāi)/關(guān)閉效果妈候、鍵盤彈出效果敢靡、UISwitch 控件的開(kāi)關(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í)間一定的前提下瑟蜈,給人感覺(jué)更加快速烟逊、干凈。
Spring Animation API
自 iOS 8 開(kāi)始铺根,Apple 公開(kāi)了 Spring Animation 的 API宪躯,開(kāi)發(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ù)值越大一開(kāi)始移動(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 讓人感覺(jué)更加自然,用 Apple 的話說(shuō)就是「instantly familiar」布隔。此外离陶,Spring Animation 不只能對(duì)位置使用,它適用于所有可被添加動(dòng)畫效果的屬性衅檀。