第一種方法:
view plain
- [UIView beginAnimations:@"Curl"context:nil];//動畫開始
- [UIView setAnimationDuration:1.25];//動畫期間
- [UIView setAnimationCurve:UIViewAnimationCurveEaseInOut];//動畫速度
- [UIView setAnimationTransition: UIViewAnimationTransitionCurlUp//類型
- forView:self.view
- cache:YES];
- [UIView commitAnimations];
第二種方法:
view plain
- CATransition *animation = [CATransition animation];
- [animation setDuration:1.25f];
- [animation setTimingFunction:[CAMediaTimingFunction functionWithName:kCAMediaTimingFunctionEaseIn]];
- [animation setType:kCATransitionReveal];
- [animation setSubtype: kCATransitionFromBottom];
- [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
- [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,也即所謂的主要畫面格動畫.