讓我們看一些使用JNWSpringAnimation來使用不同類型的彈簧動作并有不同屬性的動畫的例子。在我們的第一個例子中,我們還是要動畫之前同樣的紅色的球,使用我們定義的彈簧管理的彈簧效果將它的尺寸從1提升到2.0倍。
JNWSpringAnimation *scale =
[JNWSpringAnimation animationWithKeyPath:@"transform.scale"];
首先,我們定義我們的JNWSpringAnimation對象,一個動畫的新實例,命名為scale。我們使用定義的初始化器并將關鍵路徑置為“transform.scale”,不過這表示什么呢?這個關鍵路徑就是指我們想要動畫的屬性或值。它是視圖下的CALayer對象的一個屬性,也就是我們實際打算使用關鍵幀動畫的動畫。還記得CALayer是Core Animation中真正的主力么?這是因為當使用類似關鍵幀動畫的動畫時,你會將其放置到你想要動畫的layer上,而且一般這個layer是UIView對象的組成部分。想要動畫一個展示照片的UIImageView?動畫它的layer。想要動畫一個UIButton?動畫它的layer。
基于此我們有一個知道它要作用的屬性是什么的JNWSpringAnimation對象。是時候通過調整一些彈簧的屬性來調整這個動畫的動作了。
JNWSpringAnimation *scale =
[JNWSpringAnimation animationWithKeyPath:@"transform.scale"];
scale.damping = 9;
scale.stiffness = 100;
scale.mass = 2;
阻尼、剛度和質量是我們要調整獲得我們的球動畫的完美的動作的三個重要的彈簧屬性。我如何觸碰這些值呢?很簡單!JNWSpringAnimation也包含了一個Mac app讓你交互式地處理這三個值并直接看到結果。
還有一個要注意的重點是你沒有在JNWSpringAnimation中像之前在基于block的UIView
動畫中一樣設置持續時間。阻尼、剛度和質量三個屬性或產生一個一旦系統的力學到達最終值就會在最終值安定下來的彈簧動作。如果你想要縮短你動畫的持續時間,就需要調整彈簧的屬性才能快一點到達最終值,一般來說會增加彈簧的阻尼屬性。通過非人工地操作彈簧動作的整體持續時間,就可以讓你在動畫的物體想在自然世界中伴隨真實彈簧管理其整個動作和持續時間一樣移動。這就是JNWSpringAnimation創建的動畫看起來非常自然和有趣的原因。
我們剛才將一個紅色的球作為動畫示例,彈簧的動作并不是關鍵的,我們何時開始用下一節中定義的動作動畫實際的界面元素,以及我們想要實現什么才是關鍵。這就是為什么一個類似JNWSpringAnimation提供的交互式的彈簧定義的app很重要,當你創建你的動畫時它節省了大量的時間。
查看完整合集:https://github.com/Cloudox/Motion-Design-for-iOS