你好,歡迎來到IOS教程網

 Ios教程網 >> IOS編程開發 >> IOS開發綜合 >> 《Motion Design for iOS》(四十五)

《Motion Design for iOS》(四十五)

編輯:IOS開發綜合

我們現在還剩兩個動畫,但它們比較大,需要一些思考。我們需要將頂部的線順時針旋轉45度(所以右邊向下傾斜),然後我們需要底部的線逆時針旋轉45度(所以右邊向上傾斜)。逆時針旋轉意味著我們需要旋轉一個負值,所以是-45度。當然了,動畫不會接受度數值,它們需要角度值,45度在角度上是π/4。來做一些旋轉動畫。

// 旋轉頂部的線來構成X
POPSpringAnimation *topRotate =
    [self.top.layer pop_animationForKey:@"topRotate"];

if (topRotate) {
    topRotate.toValue = @(-M_PI/4);
} else {
    topRotate =
        [POPSpringAnimation animationWithPropertyNamed:kPOPLayerRotation];
    topRotate.toValue = @(-M_PI/4);
    topRotate.springBounciness = 11;
    topRotate.springSpeed = 18.0f;
    [self.top.layer pop_addAnimation:topRotate forKey:@"topRotate"];
}

// 旋轉底部的線來構成X
POPSpringAnimation *bottomRotate =
    [self.bottom.layer pop_animationForKey:@"bottomRotate"];

if (bottomRotate) {
    bottomRotate.toValue = @(M_PI/4);
} else {
    bottomRotate =
        [POPSpringAnimation animationWithPropertyNamed:kPOPLayerRotation];
    bottomRotate.toValue = @(M_PI/4);
    bottomRotate.springBounciness = 11;
    bottomRotate.springSpeed = 18.0f;
    [self.bottom.layer pop_addAnimation:bottomRotate forKey:@"bottomRotate"];
}

Pop的旋轉動畫時在layer上操作的(看到kPOPLayerRotation了沒),所以我們將動畫添加到支撐這些視圖的layer上。

我們向上旋轉一根線、向下旋轉一根線所以它們應該在中間交叉,對嗎?讓我們看看我們得到了什麼。


\


額,直觀地說,這可能並不是你期待的樣子。旋轉動畫讓線條變成這樣的原因是沒跟線條都是圍繞著它們layer的中心旋轉的。所以這些視圖會像跷跷板一樣旋轉,而不是我們想要的在中間交叉的樣子。我們可以改變layer旋轉的錨點,但這有點麻煩,因為這樣做會重定位layer並且我們需要調整框架,這純粹是找麻煩。所以,更簡單的做法是,我們可以就將頂部線下移一點,然後將底部的線上移一旦,然後重疊它們。<喎?/kf/ware/vc/" target="_blank" class="keylink">vcD4NCjxwcmUgY2xhc3M9"brush:java;"> // 重定位頂部的線到按鈕的中間 POPSpringAnimation *topPosition = [self.top.layer pop_animationForKey:@"topPosition"]; if (topPosition) { topPosition.toValue = @(29); } else { topPosition = [POPSpringAnimation animationWithPropertyNamed:kPOPLayerTranslationY]; topPosition.toValue = @(29); topPosition.springBounciness = 0; topPosition.springSpeed = 18.0f; [self.top.layer pop_addAnimation:topPosition forKey:@"topPosition"]; } // 重定位底部的線到按鈕的中間 POPSpringAnimation *bottomPosition = [self.bottom.layer pop_animationForKey:@"bottomPosition"]; if (bottomPosition) { bottomPosition.toValue = @(-29); } else { bottomPosition = [POPSpringAnimation animationWithPropertyNamed:kPOPLayerTranslationY]; bottomPosition.toValue = @(-29); bottomPosition.springBounciness = 0; bottomPosition.springSpeed = 18.0f; [self.bottom.layer pop_addAnimation:bottomPosition forKey:@"bottomPosition"]; }

經過一些測試和試錯,我決定將頂部的線下移29像素,底部的線上移29像素,這樣會讓它們重合的最好。你也可以做一些三角幾何計算來得出這個值。我們使用kPOPLayerTranslationY動畫來讓兩根線旋轉到按鈕中間的X。


\


完成了!很好吧?現在,當你點擊按鈕,它會將三根線變成兩根線,但當用戶再次點擊時會發生什麼呢?這時候,不會發生任何事情,因為我們沒有實現任何其他條件分支的邏輯來將X變回三根線。幸運的是,我們可以很簡單地復制粘貼動畫,但是要將toValue值改為初始值。比如說,我們需要將兩根線都旋轉回0度,記得要移動29像素,並將它們的顏色改回白色。還有要將中間的線淡入回100%不透明。這樣就全部完成了,我們得到了一個漂亮的漢堡按鈕。



查看完整合集:https://github.com/Cloudox/Motion-Design-for-iOS

  1. 上一頁:
  2. 下一頁:
蘋果刷機越獄教程| IOS教程問題解答| IOS技巧綜合| IOS7技巧| IOS8教程
Copyright © Ios教程網 All Rights Reserved