天天看點

CATransition動畫的使用

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