在之前的視圖屬性動畫文章中,首先是提供視圖的一個初始狀態(tài)晌柬,然后在動畫塊中更改視圖的一些屬性质欲,使其變?yōu)槲覀兿胍慕K極狀態(tài)共郭,并且提供動畫時長等其他一些參數(shù)祠丝,最后 UIKit 自動為我們生成相應的動畫。
之前的視圖移動都是比較簡單的除嘹,朝著某個方向写半,從一個點到另一個點。在生活中憾赁,當把一個物體附著在彈簧上時污朽,物體的運動是一種比較復雜的彈性運動。UIView 提供了一個動畫方法龙考,其時間對應于物理彈簧的運動曲線蟆肆。具體可以看下圖:
默認的動畫曲線是比較平滑的,Spring 動畫的曲線是開始的快晦款,結(jié)束的慢炎功。
舉個例子,從點 A 到點 B缓溅,如果使用上篇文章中動畫方法蛇损,那么是平滑的從 A 移動到 B。假若我們這次給動畫添加一點 Spring 的效果坛怪,那么動畫的表現(xiàn)將是 View 在點 B 做一會振蕩淤齐,最終又回到 B 點。就好像在 B 點有一根彈簧牽扯住了 view袜匿。
下面直接上 API:
[UIView animateWithDuration:NSTimeInterval)duration
delay:NSTimeInterval)delay
usingSpringWithDamping:(CGFloat)dampingRatio
initialSpringVelocity:(CGFloat)velocity
options:(UIViewAnimationOptions)options
animations:^{
<#code#>
}
completion:^(BOOL finished) {
<#code#>
}
];
Duration更啄、delay、animations 以及 completion 參數(shù)與之前方法的并無兩樣居灯。主要介紹下這兩個參數(shù):
- dampingRatio:阻尼系數(shù)祭务,范圍為 0.0 ~ 1.0内狗,數(shù)值越小,彈簧振動的越厲害义锥,Spring 的效果越明顯柳沙,效果對比可以看下圖:
- velocity:表示速度,數(shù)值越大移動的越快拌倍。值為 1.0 時赂鲤,這個速度為 1 秒鐘之內(nèi)走完整個動畫距離的速度。更大或更小的值會讓 view 剛到達終點時的速度更大或更小贰拿。上圖更直接:
具體的使用還是需要實際寫一些代碼來感受蛤袒。
iOS 系統(tǒng)中大量使用了 Spring 動畫熄云,Spring 動畫不僅可以對視圖的 size 等位置屬性做動畫膨更,還可以應用于 UIView 的其他動畫屬性。