標籤:
就如JNWSpringAnimation一樣,你可以調整想要模仿的彈簧動作的屬性。這裡是上個例子中相關的部分。
scale.springBounciness = 20.0f; // Between 0-20scale.springSpeed = 1.0f; // Between 0-20
Pop允許你調整彈簧的彈性和速度。每個值都可以從0到20.就如iOS 7中基於block的彈簧動畫一樣,這些值都是算入彈簧動作方程式的真實值的一個抽象。而不同於iOS 7的是,我認為Pop在抽象這些值時做的很棒,我還從沒用Pop建立過一個看起來不自然或者違反物理法則的彈簧動作。
如果你想要調整動作方程使用的真實值,你也可以深入到一個更深的層次來操作它們。
scale.dynamicsFriction = 20;scale.dynamicsMass = 1;scale.dynamicsTension = 300;
這些值類似於JNWSpringAnimation中使用的值,但不完全一樣,所以如果你想要準確地將一個JNWSpringAnimation變成Pop,就需要進行一些調整。幸運的是,springBounciness和springSpeed值在控制彈簧的動作上已經做得很好了,所以我經常就直接使用它們。
讓我們看看彈性值的調整會如何影響動畫。
這三個球的速度都是10,。紅球的彈性是5,籃球是12,綠球是20。
最終,我們將動畫添加到我們想要動畫的對象上去。
[redBall pop_addAnimation:scale forKey:@"scaleAnimation"];
我們在視圖上調用 -pop_addAnimation:forKey: 方法,並動畫對象放入 pop_addAnimation:,然後將“scale”放入 forKey:。不同於JNWSpringAnimation和其他Core Animation的是,我們傳入的鍵不需要匹配我們動畫的屬性。這個鍵只是視圖上這個動畫的一個唯一的名字,可以是你想要的任何值。如果你想要在啟動並執行時候擷取一個動畫,你可以通過這個鍵來詢問視圖或者layer的Pop動畫,這就是它的用處。
現在讓我們來一次性添加一些不同的動畫,每個都動畫不同的屬性。在我們展示代碼之前,這裡是它看起來的樣子。
這個動畫做了四件事情:視圖的尺寸拉大,移動到了右邊,旋轉,並且還改變了背景色。這是我們添加的四個分開的動畫,並且有四個分開的動畫對象,每個表示一個不同的動畫。
POPSpringAnimation *scale = [POPSpringAnimation animationWithPropertyNamed:kPOPViewScaleXY];scale.toValue = [NSValue valueWithCGPoint:CGPointMake(1.5, 1.5)];scale.springBounciness = 15;scale.springSpeed = 5.0f;[orangeSquare pop_addAnimation:scale forKey:@"scale"];POPSpringAnimation *move = [POPSpringAnimation animationWithPropertyNamed:kPOPLayerPositionX];move.toValue = @(500);move.springBounciness = 15;move.springSpeed = 5.0f;[orangeSquare.layer pop_addAnimation:move forKey:@"position"];POPSpringAnimation *spin = [POPSpringAnimation animationWithPropertyNamed:kPOPLayerRotation];spin.toValue = @(M_PI*4);spin.springBounciness = 15;spin.springSpeed = 5.0f;[orangeSquare.layer pop_addAnimation:spin forKey:@"spin"];POPSpringAnimation *color = [POPSpringAnimation animationWithPropertyNamed:kPOPViewBackgroundColor];color.toValue = [UIColor greenColor];color.springBounciness = 15;color.springSpeed = 5.0f;[orangeSquare pop_addAnimation:color forKey:@"colorChange"];
我們使用了操作下面這些屬性的動畫:kPOPViewScaleXY、kPOPLayerPositionX、kPOPLayerRotation、kPOPViewBackgroundColor。兩個動畫時關於視圖的,兩個動畫時關於layer的。
如果你觀察一下我們設定為最終值的toValue變數,就可以看到一些不同的設定方法。如我之前所說,Pop一個有趣的(也有點煩人的?)方面在於Pop期望toValue改變的值取決於你要動畫的屬性。對於展開來說,我們已經說過了它想要一個NSValue對象。對於X位置動畫,我們可以直接使用Objective-C的捷徑@(500)來簡單地給對象帶來500.對於旋轉,我們同樣使用了特殊的@()文法。對於顏色我們設定了一個UIColor對象。所以你可以看到,因為Pop支撐了太多的動畫屬性,就有一些需要被理解的細微差別。我曾經混淆了NSValue封裝的CGPoint`,並且盯著My Code看了30秒才意識到它想要一些不同的值。
是時候用Pop來構建一些酷的東西了。
查看完整合集:https://github.com/Cloudox/Motion-Design-for-iOS
著作權:http://blog.csdn.net/cloudox_
《Motion Design for iOS》(四十一)