objective-C 中兩種實現動畫的方法)

來源:互聯網
上載者:User

第一種方法:

 

view plain
  1. [UIView beginAnimations:@"Curl"context:nil];//動畫開始  
  2. [UIView setAnimationDuration:1.25];//動畫期間  
  3. [UIView setAnimationCurve:UIViewAnimationCurveEaseInOut];//動畫速度  
  4. [UIView setAnimationTransition: UIViewAnimationTransitionCurlUp//類型  
  5.                        forView:self.view  
  6.                          cache:YES];  
  7. [UIView commitAnimations];  

 

 

 

第二種方法:

 

view plain
  1. CATransition *animation = [CATransition animation];   
  2. [animation setDuration:1.25f];   
  3. [animation setTimingFunction:[CAMediaTimingFunction functionWithName:kCAMediaTimingFunctionEaseIn]];  
  4. [animation setType:kCATransitionReveal];  
  5. [animation setSubtype: kCATransitionFromBottom];  
  6. [self.view.layer addAnimation:animation forKey:@"Reveal"];  

 

 

 

 

setType:可以返回四種類型:

1. kCATransitionFade淡出

2. kCATransitionMoveIn覆蓋原圖

3. kCATransitionPush推出

4. kCATransitionReveal底部顯出來

 

setSubtype:也可以有四種類型:

1. kCATransitionFromRight;

2. kCATransitionFromLeft(預設值)

3. kCATransitionFromTop;

4. kCATransitionFromBottom

 

 

 

還有一種設定動畫類型的方法,不用setSubtype,只用setTyp

 

view plain
  1. [animation setType:@"suckEffect"];  

 

 

 

注意:

 

在浪費了很多Time和耐心後,測試出僅僅以下類型現在是可用的:

suckEffect(三角)

rippleEffect(水波抖動)

pageCurl(上翻頁)

pageUnCurl(下翻頁)

oglFlip(上下翻轉)

cameraIris/cameraIrisHollowOpen/cameraIrisHollowClose  (鏡頭快門,這一組動畫是有效果,只是很難看,不建議使用

 

 

 

而以下為則黑名單:

spewEffect: 新版面在螢幕下方中間位置被釋放出來覆蓋舊版面.

- genieEffect: 舊版面在螢幕左下方或右下方被吸走, 顯示出下面的新版面 (阿拉丁燈神?).

- unGenieEffect: 新版面在螢幕左下方或右下方被釋放出來覆蓋舊版面.

- twist: 版面以水平方向像龍捲風式轉出來.

- tubey: 版面垂直附有彈性的轉出來.

- swirl: 舊版面360度旋轉並淡出, 顯示出新版面.

- charminUltra: 舊版面淡出並顯示新版面.

- zoomyIn: 新版面由小放大走到前面, 舊版面放大由前面消失.

- zoomyOut: 新版面螢幕外面縮放出現, 舊版面縮小消失.

- oglApplicationSuspend: 像按"home" 按鈕的效果.

還有:mapCurl,mapUnCurl

五種預定義的時間函數名字的常量變數分別為 

kCAMediaTimingFunctionLinear, 

kCAMediaTimingFunctionEaseIn, 

kCAMediaTimingFunctionEaseOut, 

kCAMediaTimingFunctionEaseInEaseOut, 

kCAMediaTimingFunctionDefault. 

展示了前面四種Timing Function的曲線圖,橫座標表示時間,縱座標表示變化量,這點需要搞清楚(並不是平面座標系中xy).

自訂的Timing Function的函數映像就是一條三次貝茲路徑Cubic Bezier Curve,貝茲路徑的優點就是光滑,用在這裡就使得變化顯得光滑.一條三次貝茲路徑可以由起點終點以及兩個控制點決定. 

上面的kCAMediaTimingFunctionDefault對應的函數曲線其實就是通過[(0.0,0.0), (0.25,0.1), (0.25,0.1), (1.0,1.0)]這四個點決定的三次貝茲路徑,頭尾為起點和終點,中間的兩個點是控制點. 


中P0是起點,P3是終點,P1和P2是兩個控制點

如果時間變化曲線既不是直線也不是貝茲路徑,而是自訂的,又或者某個圖層運動的軌跡不是直線而是一個曲線,這些是基本動畫無法做到的,所以引入下面的內容,CAKeyframeAnimation,也即所謂的主要畫面格動畫.

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.