CATransition動畫主要是通過設定一些動畫屬性,然後将CATransition執行個體添加到UIView的layer層上以實作動畫效果。
1 type 各種動畫效果 其中除了'fade', `moveIn', `push' , `reveal' ,其他屬于私有的API(我是這麼認為的,可以點進去看下注釋).可以分别使用'kCATransitionFade', 'kCATransitionMoveIn', 'kCATransitionPush', 'kCATransitionReveal'來調用.
@"cube" 立方體翻滾效果
@"moveIn" 新視圖移到舊視圖上面
@"reveal" 顯露效果(将舊視圖移開,顯示下面的新視圖)
@"fade" 交叉淡化過渡(不支援過渡方向)(預設為此效果)
@"pageCurl" 向上翻一頁
@"pageUnCurl" 向下翻一頁
@"suckEffect" 收縮效果,類似系統最小化視窗時的神奇效果(不支援過渡方向)
@"rippleEffect" 滴水效果,(不支援過渡方向)
@"oglFlip" 上下左右翻轉效果
@"rotate" 旋轉效果
@"push"
@"cameraIrisHollowOpen" 相機鏡頭打開效果(不支援過渡方向)
@"cameraIrisHollowClose" 相機鏡頭關上效果(不支援過渡方向)
kCATransitionFade 交叉淡化過渡
kCATransitionMoveIn 新視圖移到舊視圖上面
kCATransitionPush 新視圖把舊視圖推出去
kCATransitionReveal 将舊視圖移開,顯示下面的新視圖
2 subType 各種動畫方向
kCATransitionFromRight; 同字面意思(下同)
kCATransitionFromLeft;
kCATransitionFromTop;
kCATransitionFromBottom;
當type為@"rotate"(旋轉)的時候,它也有幾個對應的subtype,分别為:
90cw 逆時針旋轉90°
90ccw 順時針旋轉90°
180cw 逆時針旋轉180°
180ccw 順時針旋轉180°
3 timingFunction 用于變化起點和終點之間的插值計算,形象點說它決定了動畫運作的節奏,比如是均勻變化(相同時間變化量相同)還是先快後慢,先慢後快還是先慢再快再慢.
動畫的開始與結束的快慢,有五個預置分别為(下同):
kCAMediaTimingFunctionLinear 線性,即勻速
kCAMediaTimingFunctionEaseIn 先慢後快
kCAMediaTimingFunctionEaseOut 先快後慢
kCAMediaTimingFunctionEaseInEaseOut 先慢後快再慢
kCAMediaTimingFunctionDefault 實際效果是動畫中間比較快
/**
* CATransition動畫效果
*
* @param type 動畫效果類型kCATransitionFade,kCATransitionMoveIn,kCATransitionPush,kCATransitionReveal
* @param subType 動畫效果方向kCATransitionFromRight,kCATransitionFromLeft,kCATransitionFromTop,kCATransitionFromBottom
* @param duration 動畫時間
* @param timingFunction 動畫函數名kCAMediaTimingFunctionLinear,kCAMediaTimingFunctionEaseIn,kCAMediaTimingFunctionEaseOut,kCAMediaTimingFunctionEaseInEaseOut,kCAMediaTimingFunctionDefault
* @param theView 添加動畫效果的UIView
*/
+ (void)showAnimationType:(NSString *)type
withSubType:(NSString *)subType
duration:(CFTimeInterval)duration
timingFunction:(NSString *)timingFunction
view:(UIView *)theView
{
CATransition *animation = [CATransition animation];
animation.duration = duration;
animation.timingFunction = [CAMediaTimingFunction functionWithName:timingFunction];
animation.fillMode = kCAFillModeForwards;
animation.type = type;
animation.subtype = subType;
[theView.layer addAnimation:animation forKey:nil];
}
// 示例
[self showAnimationType:kCATransitionReveal withSubType:kCATransitionFromRight duration:0.6 timingFunction:kCAMediaTimingFunctionEaseInEaseOut view:self.imageView];