[譯]《Motion Design for iOS》(四十一)

就如JNWSpringAnimation一樣,你可以調(diào)整想要模仿的彈簧動(dòng)作的屬性。這里是上個(gè)例子中相關(guān)的部分。

scale.springBounciness = 20.0f; // Between 0-20
scale.springSpeed = 1.0f; // Between 0-20

Pop允許你調(diào)整彈簧的彈性和速度。每個(gè)值都可以從0到20.就如iOS 7中基于block的彈簧動(dòng)畫一樣,這些值都是算入彈簧動(dòng)作方程式的真實(shí)值的一個(gè)抽象。而不同于iOS 7的是,我認(rèn)為Pop在抽象這些值時(shí)做的很棒,我還從沒用Pop創(chuàng)建過一個(gè)看起來不自然或者違反物理法則的彈簧動(dòng)作。

如果你想要調(diào)整動(dòng)作方程使用的真實(shí)值,你也可以深入到一個(gè)更深的層次來操作它們。

scale.dynamicsFriction = 20;
scale.dynamicsMass = 1;
scale.dynamicsTension = 300;

這些值類似于JNWSpringAnimation中使用的值,但不完全一樣,所以如果你想要準(zhǔn)確地將一個(gè)JNWSpringAnimation變成Pop,就需要進(jìn)行一些調(diào)整。幸運(yùn)的是,springBounciness和springSpeed值在控制彈簧的動(dòng)作上已經(jīng)做得很好了,所以我經(jīng)常就直接使用它們。

讓我們看看彈性值的調(diào)整會(huì)如何影響動(dòng)畫。


image

這三個(gè)球的速度都是10,。紅球的彈性是5,籃球是12,綠球是20。

最終,我們將動(dòng)畫添加到我們想要?jiǎng)赢嫷膶ο笊先ァ?/p>

[redBall pop_addAnimation:scale forKey:@"scaleAnimation"];

我們在視圖上調(diào)用 -pop_addAnimation:forKey: 方法,并動(dòng)畫對象放入 pop_addAnimation:,然后將“scale”放入 forKey:。不同于JNWSpringAnimation和其他Core Animation的是,我們傳入的鍵不需要匹配我們動(dòng)畫的屬性。這個(gè)鍵只是視圖上這個(gè)動(dòng)畫的一個(gè)唯一的名字,可以是你想要的任何值。如果你想要在運(yùn)行的時(shí)候獲取一個(gè)動(dòng)畫,你可以通過這個(gè)鍵來詢問視圖或者layer的Pop動(dòng)畫,這就是它的用處。

現(xiàn)在讓我們來一次性添加一些不同的動(dòng)畫,每個(gè)都動(dòng)畫不同的屬性。在我們展示代碼之前,這里是它看起來的樣子。


image

這個(gè)動(dòng)畫做了四件事情:視圖的尺寸拉大,移動(dòng)到了右邊,旋轉(zhuǎn),并且還改變了背景色。這是我們添加的四個(gè)分開的動(dòng)畫,并且有四個(gè)分開的動(dòng)畫對象,每個(gè)表示一個(gè)不同的動(dòng)畫。

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"];

我們使用了操作下面這些屬性的動(dòng)畫:kPOPViewScaleXY、kPOPLayerPositionX、kPOPLayerRotation、kPOPViewBackgroundColor。兩個(gè)動(dòng)畫時(shí)關(guān)于視圖的,兩個(gè)動(dòng)畫時(shí)關(guān)于layer的。

如果你觀察一下我們設(shè)置為最終值的toValue變量,就可以看到一些不同的設(shè)置方法。如我之前所說,Pop一個(gè)有趣的(也有點(diǎn)煩人的?)方面在于Pop期望toValue改變的值取決于你要?jiǎng)赢嫷膶傩?。對于拉伸來說,我們已經(jīng)說過了它想要一個(gè)NSValue對象。對于X位置動(dòng)畫,我們可以直接使用Objective-C的快捷方式@(500)來簡單地給對象帶來500.對于旋轉(zhuǎn),我們同樣使用了特殊的@()語法。對于顏色我們設(shè)定了一個(gè)UIColor對象。所以你可以看到,因?yàn)镻op支撐了太多的動(dòng)畫屬性,就有一些需要被理解的細(xì)微差別。我曾經(jīng)混淆了NSValue包裝的CGPoint`,并且盯著我的代碼看了30秒才意識(shí)到它想要一些不同的值。

是時(shí)候用Pop來構(gòu)建一些酷的東西了。

查看完整合集(喜歡請打星~):https://github.com/Cloudox/Motion-Design-for-iOS


查看作者首頁

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡書系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

  • 翻譯自“View Controller Programming Guide for iOS”。 1 彈出視圖控制器...
    lakerszhy閱讀 3,786評論 2 20
  • 翻譯自“Collection View Programming Guide for iOS” 0 關(guān)于iOS集合視...
    lakerszhy閱讀 4,082評論 1 22
  • 發(fā)現(xiàn) 關(guān)注 消息 iOS 第三方庫、插件、知名博客總結(jié) 作者大灰狼的小綿羊哥哥關(guān)注 2017.06.26 09:4...
    肇東周閱讀 15,628評論 4 61
  • 有的人活著,只是因?yàn)闆]有死去;有的人經(jīng)歷苦難,只是不得不經(jīng)歷。 如果說世俗意義上的活著,可以是為了財(cái)富、權(quán)利、尊嚴(yán)...
    悅文識(shí)己閱讀 631評論 0 0
  • 夢見自己出去銷售,進(jìn)了娛樂場所,轉(zhuǎn)這里轉(zhuǎn)那里,被人帶著,恐懼尋找人的心里,結(jié)果就變成了人追人,還有我父親。 后一個(gè)...
    soulouM閱讀 221評論 0 0

友情鏈接更多精彩內(nèi)容