你可能會想,我們使用基于block的UIView動畫時并不需要處理這些,完全正確。UIView上基于block的動畫方法是一個創(chuàng)建簡單動畫的更方便的方式,因為它們會自動保留最終值而無需去設(shè)置。當(dāng)然了,你會被默認(rèn)的過渡動作或者iOS 7提供的簡單的彈簧動作所限制。如果你想要完整控制你的動畫并想要細(xì)致地調(diào)整你的彈簧屬性,你就需要奔向真實的CAAnimation對象,JNWSpringAnimation就是其中之一。
使用類似JNWSpringAnimation彈簧動畫框架的真實誘惑是你可以獲得對你彈簧力學(xué)的精確控制,所以讓我們看看更多使用不同彈簧動作的紅球的例子。
JNWSpringAnimation *scale =
[JNWSpringAnimation animationWithKeyPath:@"transform.scale"];
scale.damping = 13;
scale.stiffness = 540;
scale.mass = 11;
scale.fromValue = @(1.0);
scale.toValue = @(2);
[redBall.layer addAnimation:scale forKey:scale.keyPath];
redBall.transform = CGAffineTransformMakeScale(2.0, 2.0);
這些彈簧屬性產(chǎn)生了一個更慢、更深的移動。
image
下一個例子沒有任何彈性,但有一個指數(shù)衰減動作來慢慢地到達(dá)最終值。這是模仿過阻尼的彈簧系統(tǒng)。這個動作類似于簡單的淡出動作,但到達(dá)最終值時會更加的輕緩。我們也可以通過操作阻尼和剛度屬性來調(diào)整其到達(dá)最終值的速度。
// 所有其他部分的代碼都是一樣的
scale.damping = 6;
scale.stiffness = 6;
scale.mass = 1;
image
這里是三個并排的球,第一個的阻尼為6、剛度為6、質(zhì)量為1。第二個阻尼為15、剛度為15、質(zhì)量為1。第三個阻尼為30、剛度為30、質(zhì)量為1。他們都是指數(shù)衰減型的動作,但他們到達(dá)最終值的速度不同。
image
查看完整合集:https://github.com/Cloudox/Motion-Design-for-iOS