30多種iOS常用動畫

轉(zhuǎn)自:http://blog.csdn.net/zhibudefeng/article/details/8691567

//??

//??CoreAnimationEffect.h??

//??CoreAnimationEffect??

//??

//??Created?by?VincentXue?on?13-1-19.??

//??Copyright?(c)?2013年?VincentXue.?All?rights?reserved.??

//??


#import???


/**

?!??導(dǎo)入QuartzCore.framework

?*

?*??Example:

?*

?*??Step.1

?*

?*??????#import?"CoreAnimationEffect.h"

?*

?*??Step.2

?*

?*??????[CoreAnimationEffect?animationMoveLeft:your?view];

?*??

?*/??



@interface?CoreAnimationEffect?:?NSObject??


#pragma?mark?-?Custom?Animation??


/**

?*???@brief?快速構(gòu)建一個你自定義的動畫,有以下參數(shù)供你設(shè)置.

?*

?*???@note??調(diào)用系統(tǒng)預(yù)置Type需要在調(diào)用類引入下句

?*

?*??????????#import?

?*

?*???@param?type????????????????動畫過渡類型

?*???@param?subType?????????????動畫過渡方向(子類型)

?*???@param?duration????????????動畫持續(xù)時間

?*???@param?timingFunction??????動畫定時函數(shù)屬性

?*???@param?theView?????????????需要添加動畫的view.

?*

?*

?*/??


+?(void)showAnimationType:(NSString?*)type??

?withSubType:(NSString?*)subType??

?duration:(CFTimeInterval)duration??

?timingFunction:(NSString?*)timingFunction??

?view:(UIView?*)theView;??


#pragma?mark?-?Preset?Animation??


/**

?*??下面是一些常用的動畫效果

?*/??


//?reveal??

+?(void)animationRevealFromBottom:(UIView?*)view;??

+?(void)animationRevealFromTop:(UIView?*)view;??

+?(void)animationRevealFromLeft:(UIView?*)view;??

+?(void)animationRevealFromRight:(UIView?*)view;??


//?漸隱漸消??

+?(void)animationEaseIn:(UIView?*)view;??

+?(void)animationEaseOut:(UIView?*)view;??


//?翻轉(zhuǎn)??

+?(void)animationFlipFromLeft:(UIView?*)view;??

+?(void)animationFlipFromRigh:(UIView?*)view;??


//?翻頁??

+?(void)animationCurlUp:(UIView?*)view;??

+?(void)animationCurlDown:(UIView?*)view;??


//?push??

+?(void)animationPushUp:(UIView?*)view;??

+?(void)animationPushDown:(UIView?*)view;??

+?(void)animationPushLeft:(UIView?*)view;??

+?(void)animationPushRight:(UIView?*)view;??


//?move??

+?(void)animationMoveUp:(UIView?*)view?duration:(CFTimeInterval)duration;??

+?(void)animationMoveDown:(UIView?*)view?duration:(CFTimeInterval)duration;??

+?(void)animationMoveLeft:(UIView?*)view;??

+?(void)animationMoveRight:(UIView?*)view;??


//?旋轉(zhuǎn)縮放??


//?各種旋轉(zhuǎn)縮放效果??

+?(void)animationRotateAndScaleEffects:(UIView?*)view;??


//?旋轉(zhuǎn)同時縮小放大效果??

+?(void)animationRotateAndScaleDownUp:(UIView?*)view;??




#pragma?mark?-?Private?API??


/**

?*??下面動畫里用到的某些屬性在當(dāng)前API里是不合法的,但是也可以用.

?*/??


+?(void)animationFlipFromTop:(UIView?*)view;??

+?(void)animationFlipFromBottom:(UIView?*)view;??


+?(void)animationCubeFromLeft:(UIView?*)view;??

+?(void)animationCubeFromRight:(UIView?*)view;??

+?(void)animationCubeFromTop:(UIView?*)view;??

+?(void)animationCubeFromBottom:(UIView?*)view;??


+?(void)animationSuckEffect:(UIView?*)view;??


+?(void)animationRippleEffect:(UIView?*)view;??


+?(void)animationCameraOpen:(UIView?*)view;??

+?(void)animationCameraClose:(UIView?*)view;??


@end??




//??

//??CoreAnimationEffect.m??

//??CoreAnimationEffect??

//??

//??Created?by?VincentXue?on?13-1-19.??

//??Copyright?(c)?2013年?VincentXue.?All?rights?reserved.??

//??


#import?"CoreAnimationEffect.h"??


#import???


@implementation?CoreAnimationEffect??


/**

?*??首先推薦一個不錯的網(wǎng)站.???http://www.raywenderlich.com

?*/??


#pragma?mark?-?Custom?Animation??


+?(void)showAnimationType:(NSString?*)type??

?withSubType:(NSString?*)subType??

?duration:(CFTimeInterval)duration??

?timingFunction:(NSString?*)timingFunction??

?view:(UIView?*)theView??

{??

/**?CATransition

?????*

?????*??@see?http://www.dreamingwish.com/dream-2012/the-concept-of-coreanimation-programming-guide.html

?????*??@see?http://geeklu.com/2012/09/animation-in-ios/

?????*

?????*??CATransition?常用設(shè)置及屬性注解如下:

?????*/??


CATransition?*animation?=?[CATransition?animation];??


/**?delegate

?????*

?????*??動畫的代理,如果你想在動畫開始和結(jié)束的時候做一些事,可以設(shè)置此屬性,它會自動回調(diào)兩個代理方法.

?????*

?????*??@see?CAAnimationDelegate????(按下command鍵點擊)

?????*/??


animation.delegate?=?self;??


/**?duration

?????*

?????*??動畫持續(xù)時間

?????*/??


animation.duration?=?duration;??


/**?timingFunction

?????*

?????*??用于變化起點和終點之間的插值計算,形象點說它決定了動畫運行的節(jié)奏,比如是均勻變化(相同時間變化量相同)還是

?????*??先快后慢,先慢后快還是先慢再快再慢.

?????*

?????*??動畫的開始與結(jié)束的快慢,有五個預(yù)置分別為(下同):

?????*??kCAMediaTimingFunctionLinear????????????線性,即勻速

?????*??kCAMediaTimingFunctionEaseIn????????????先慢后快

?????*??kCAMediaTimingFunctionEaseOut???????????先快后慢

?????*??kCAMediaTimingFunctionEaseInEaseOut?????先慢后快再慢

?????*??kCAMediaTimingFunctionDefault???????????實際效果是動畫中間比較快.

?????*/??


/**?timingFunction

?????*

?????*??當(dāng)上面的預(yù)置不能滿足你的需求的時候,你可以使用下面的兩個方法來自定義你的timingFunction

?????*??具體參見下面的URL

?????*

?????*??@see?http://developer.apple.com/library/ios/#documentation/Cocoa/Reference/CAMediaTimingFunction_class/Introduction/Introduction.html

?????*

?????*??+?(id)functionWithControlPoints:(float)c1x?:(float)c1y?:(float)c2x?:(float)c2y;

?????*

?????*??-?(id)initWithControlPoints:(float)c1x?:(float)c1y?:(float)c2x?:(float)c2y;

?????*/??


animation.timingFunction?=?[CAMediaTimingFunction?functionWithName:timingFunction];??


/**?fillMode

?????*

?????*??決定當(dāng)前對象過了非active時間段的行為,比如動畫開始之前,動畫結(jié)束之后.

?????*??預(yù)置為:

?????*??kCAFillModeRemoved???默認(rèn),當(dāng)動畫開始前和動畫結(jié)束后,動畫對layer都沒有影響,動畫結(jié)束后,layer會恢復(fù)到之前的狀態(tài)

?????*??kCAFillModeForwards??當(dāng)動畫結(jié)束后,layer會一直保持著動畫最后的狀態(tài)

?????*??kCAFillModeBackwards?和kCAFillModeForwards相對,具體參考上面的URL

?????*??kCAFillModeBoth??????kCAFillModeForwards和kCAFillModeBackwards在一起的效果

?????*/??


animation.fillMode?=?kCAFillModeForwards;??


/**?removedOnCompletion

?????*

?????*??這個屬性默認(rèn)為YES.一般情況下,不需要設(shè)置這個屬性.

?????*

?????*??但如果是CAAnimation動畫,并且需要設(shè)置?fillMode?屬性,那么需要將?removedOnCompletion?設(shè)置為NO,否則

?????*??fillMode無效

?????*/??


//????animation.removedOnCompletion?=?NO;??


/**?type

?????*

?????*??各種動畫效果??其中除了'fade',?`moveIn',?`push'?,?`reveal'?,其他屬于似有的API(我是這么認(rèn)為的,可以點進去看下注釋).

?????*??↑↑↑上面四個可以分別使用'kCATransitionFade',?'kCATransitionMoveIn',?'kCATransitionPush',?'kCATransitionReveal'來調(diào)用.

?????*??@"cube"?????????????????????立方體翻滾效果

?????*??@"moveIn"???????????????????新視圖移到舊視圖上面

?????*??@"reveal"???????????????????顯露效果(將舊視圖移開,顯示下面的新視圖)

?????*??@"fade"?????????????????????交叉淡化過渡(不支持過渡方向)?????????????(默認(rèn)為此效果)

?????*??@"pageCurl"?????????????????向上翻一頁

?????*??@"pageUnCurl"???????????????向下翻一頁

?????*??@"suckEffect"???????????????收縮效果,類似系統(tǒng)最小化窗口時的神奇效果(不支持過渡方向)

?????*??@"rippleEffect"?????????????滴水效果,(不支持過渡方向)

?????*??@"oglFlip"??????????????????上下左右翻轉(zhuǎn)效果

?????*??@"rotate"???????????????????旋轉(zhuǎn)效果

?????*??@"push"?????????????????????

?????*??@"cameraIrisHollowOpen"?????相機鏡頭打開效果(不支持過渡方向)

?????*??@"cameraIrisHollowClose"????相機鏡頭關(guān)上效果(不支持過渡方向)

?????*/??


/**?type

?????*

?????*??kCATransitionFade????????????交叉淡化過渡

?????*??kCATransitionMoveIn??????????新視圖移到舊視圖上面

?????*??kCATransitionPush????????????新視圖把舊視圖推出去

?????*??kCATransitionReveal??????????將舊視圖移開,顯示下面的新視圖

?????*/??


animation.type?=?type;??


/**?subtype

?????*

?????*??各種動畫方向

?????*

?????*??kCATransitionFromRight;??????同字面意思(下同)

?????*??kCATransitionFromLeft;

?????*??kCATransitionFromTop;

?????*??kCATransitionFromBottom;

?????*/??


/**?subtype

?????*

?????*??當(dāng)type為@"rotate"(旋轉(zhuǎn))的時候,它也有幾個對應(yīng)的subtype,分別為:

?????*??90cw????逆時針旋轉(zhuǎn)90°

?????*??90ccw???順時針旋轉(zhuǎn)90°

?????*??180cw???逆時針旋轉(zhuǎn)180°

?????*??180ccw??順時針旋轉(zhuǎn)180°

?????*/??


/**

?????*??type與subtype的對應(yīng)關(guān)系(必看),如果對應(yīng)錯誤,動畫不會顯現(xiàn).

?????*

?????*??@see?http://iphonedevwiki.net/index.php/CATransition

?????*/??


animation.subtype?=?subType;??


/**

?????*??所有核心動畫和特效都是基于CAAnimation,而CAAnimation是作用于CALayer的.所以把動畫添加到layer上.

?????*??forKey??可以是任意字符串.

?????*/??


[theView.layer?addAnimation:animation?forKey:nil];??

}??


#pragma?mark?-?Preset?Animation??



+?(void)animationRevealFromBottom:(UIView?*)view??

{??

CATransition?*animation?=?[CATransition?animation];??

[animation?setDuration:0.35f];??

[animation?setType:kCATransitionReveal];??

[animation?setSubtype:kCATransitionFromBottom];??

[animation?setFillMode:kCAFillModeForwards];??

[animation?setTimingFunction:[CAMediaTimingFunction?functionWithName:kCAMediaTimingFunctionEaseIn]];??


[view.layer?addAnimation:animation?forKey:nil];??

}??


+?(void)animationRevealFromTop:(UIView?*)view??

{??

CATransition?*animation?=?[CATransition?animation];??

[animation?setDuration:0.35f];??

[animation?setType:kCATransitionReveal];??

[animation?setSubtype:kCATransitionFromTop];??

[animation?setFillMode:kCAFillModeForwards];??

[animation?setTimingFunction:[CAMediaTimingFunction?functionWithName:kCAMediaTimingFunctionEaseOut]];??


[view.layer?addAnimation:animation?forKey:nil];??

}??


+?(void)animationRevealFromLeft:(UIView?*)view??

{??

CATransition?*animation?=?[CATransition?animation];??

[animation?setDuration:0.35f];??

[animation?setType:kCATransitionReveal];??

[animation?setSubtype:kCATransitionFromLeft];??

[animation?setFillMode:kCAFillModeForwards];??

[animation?setTimingFunction:[CAMediaTimingFunction?functionWithName:kCAMediaTimingFunctionEaseInEaseOut]];??


[view.layer?addAnimation:animation?forKey:nil];??

}??


+?(void)animationRevealFromRight:(UIView?*)view??

{??

CATransition?*animation?=?[CATransition?animation];??

[animation?setDuration:0.35f];??

[animation?setType:kCATransitionReveal];??

[animation?setSubtype:kCATransitionFromRight];??

[animation?setFillMode:kCAFillModeForwards];??

[animation?setTimingFunction:[CAMediaTimingFunction?functionWithName:kCAMediaTimingFunctionEaseInEaseOut]];??


[view.layer?addAnimation:animation?forKey:nil];??

}??



+?(void)animationEaseIn:(UIView?*)view??

{??

CATransition?*animation?=?[CATransition?animation];??

[animation?setDuration:0.35f];??

[animation?setType:kCATransitionFade];??

[animation?setFillMode:kCAFillModeForwards];??

[animation?setTimingFunction:[CAMediaTimingFunction?functionWithName:kCAMediaTimingFunctionEaseIn]];??


[view.layer?addAnimation:animation?forKey:nil];??

}??


+?(void)animationEaseOut:(UIView?*)view??

{??

CATransition?*animation?=?[CATransition?animation];??

[animation?setDuration:0.35f];??

[animation?setType:kCATransitionFade];??

[animation?setFillMode:kCAFillModeForwards];??

[animation?setTimingFunction:[CAMediaTimingFunction?functionWithName:kCAMediaTimingFunctionEaseOut]];??


[view.layer?addAnimation:animation?forKey:nil];??

}??



/**

?*??UIViewAnimation

?*

?*??@see????http://www.cocoachina.com/bbs/read.php?tid=110168

?*

?*??@brief??UIView動畫應(yīng)該是最簡單便捷創(chuàng)建動畫的方式了,詳解請猛戳URL.

?*??

?*??@method?beginAnimations:context?第一個參數(shù)用來作為動畫的標(biāo)識,第二個參數(shù)給代理代理傳遞消息.至于為什么一個使用

?*??????????????????????????????????nil而另外一個使用NULL,是因為第一個參數(shù)是一個對象指針,而第二個參數(shù)是基本數(shù)據(jù)類型.

?*??@method?setAnimationCurve:??????設(shè)置動畫的加速或減速的方式(速度)

?*??@method?setAnimationDuration:???動畫持續(xù)時間

?*??@method?setAnimationTransition:forView:cache:???第一個參數(shù)定義動畫類型,第二個參數(shù)是當(dāng)前視圖對象,第三個參數(shù)是是否使用緩沖區(qū)

?*??@method?commitAnimations????????動畫結(jié)束

?*/??


+?(void)animationFlipFromLeft:(UIView?*)view??

{??

[UIView?beginAnimations:nil?context:NULL];??

[UIView?setAnimationCurve:UIViewAnimationCurveEaseInOut];??

[UIView?setAnimationDuration:0.35f];??

[UIView?setAnimationTransition:UIViewAnimationTransitionFlipFromLeft?forView:view?cache:NO];??

[UIView?commitAnimations];??

}??


+?(void)animationFlipFromRigh:(UIView?*)view??

{??

[UIView?beginAnimations:nil?context:NULL];??

[UIView?setAnimationCurve:UIViewAnimationCurveEaseInOut];??

[UIView?setAnimationDuration:0.35f];??

[UIView?setAnimationTransition:UIViewAnimationTransitionFlipFromRight?forView:view?cache:NO];??

[UIView?commitAnimations];??

}??



+?(void)animationCurlUp:(UIView?*)view??

{??

[UIView?beginAnimations:nil?context:NULL];??

[UIView?setAnimationCurve:UIViewAnimationCurveEaseOut];??

[UIView?setAnimationDuration:0.35f];??

[UIView?setAnimationTransition:UIViewAnimationTransitionCurlUp?forView:view?cache:NO];??

[UIView?commitAnimations];??

}??


+?(void)animationCurlDown:(UIView?*)view??

{??

[UIView?beginAnimations:nil?context:NULL];??

[UIView?setAnimationCurve:UIViewAnimationCurveEaseIn];??

[UIView?setAnimationDuration:0.35f];??

[UIView?setAnimationTransition:UIViewAnimationTransitionCurlDown?forView:view?cache:NO];??

[UIView?commitAnimations];??

}??


+?(void)animationPushUp:(UIView?*)view??

{??

CATransition?*animation?=?[CATransition?animation];??

[animation?setDuration:0.35f];??

[animation?setFillMode:kCAFillModeForwards];??

[animation?setTimingFunction:[CAMediaTimingFunction?functionWithName:kCAMediaTimingFunctionEaseOut]];??

[animation?setType:kCATransitionPush];??

[animation?setSubtype:kCATransitionFromTop];??


[view.layer?addAnimation:animation?forKey:nil];??

}??


+?(void)animationPushDown:(UIView?*)view??

{??

CATransition?*animation?=?[CATransition?animation];??

[animation?setDuration:0.35f];??

[animation?setFillMode:kCAFillModeForwards];??

[animation?setTimingFunction:[CAMediaTimingFunction?functionWithName:kCAMediaTimingFunctionEaseOut]];??

[animation?setType:kCATransitionPush];??

[animation?setSubtype:kCATransitionFromBottom];??


[view.layer?addAnimation:animation?forKey:nil];??

}??


+?(void)animationPushLeft:(UIView?*)view??

{??

CATransition?*animation?=?[CATransition?animation];??

[animation?setDuration:0.35f];??

[animation?setFillMode:kCAFillModeForwards];??

[animation?setTimingFunction:[CAMediaTimingFunction?functionWithName:kCAMediaTimingFunctionEaseOut]];??

[animation?setType:kCATransitionPush];??

[animation?setSubtype:kCATransitionFromLeft];??


[view.layer?addAnimation:animation?forKey:nil];??

}??


+?(void)animationPushRight:(UIView?*)view??

{??

CATransition?*animation?=?[CATransition?animation];??

[animation?setDuration:0.35f];??

[animation?setFillMode:kCAFillModeForwards];??

[animation?setTimingFunction:[CAMediaTimingFunction?functionWithName:kCAMediaTimingFunctionEaseOut]];??

[animation?setType:kCATransitionPush];??

[animation?setSubtype:kCATransitionFromRight];??


[view.layer?addAnimation:animation?forKey:nil];??

}??


//?presentModalViewController??

+?(void)animationMoveUp:(UIView?*)view?duration:(CFTimeInterval)duration??

{??

CATransition?*animation?=?[CATransition?animation];??

[animation?setDuration:duration];??

[animation?setFillMode:kCAFillModeForwards];??

[animation?setTimingFunction:[CAMediaTimingFunction?functionWithName:kCAMediaTimingFunctionEaseInEaseOut]];??

[animation?setType:kCATransitionMoveIn];??

[animation?setSubtype:kCATransitionFromTop];??


[view.layer?addAnimation:animation?forKey:nil];??

}??


//?dissModalViewController??

+?(void)animationMoveDown:(UIView?*)view?duration:(CFTimeInterval)duration??

{??

CATransition?*transition?=?[CATransition?animation];??

transition.duration?=0.4;??

transition.timingFunction?=?[CAMediaTimingFunction?functionWithName:kCAMediaTimingFunctionEaseInEaseOut];??

transition.type?=?kCATransitionReveal;??

transition.subtype?=?kCATransitionFromBottom;??

[view.layer?addAnimation:transition?forKey:nil];??

}??


+?(void)animationMoveLeft:(UIView?*)view??

{??

CATransition?*animation?=?[CATransition?animation];??

[animation?setDuration:0.35f];??

[animation?setFillMode:kCAFillModeForwards];??

[animation?setTimingFunction:[CAMediaTimingFunction?functionWithName:kCAMediaTimingFunctionEaseOut]];??

[animation?setType:kCATransitionMoveIn];??

[animation?setSubtype:kCATransitionFromLeft];??


[view.layer?addAnimation:animation?forKey:nil];??

}??


+?(void)animationMoveRight:(UIView?*)view??

{??

CATransition?*animation?=?[CATransition?animation];??

[animation?setDuration:0.35f];??

[animation?setFillMode:kCAFillModeForwards];??

[animation?setTimingFunction:[CAMediaTimingFunction?functionWithName:kCAMediaTimingFunctionEaseOut]];??

[animation?setType:kCATransitionMoveIn];??

[animation?setSubtype:kCATransitionFromRight];??


[view.layer?addAnimation:animation?forKey:nil];??

}??


+(void)animationRotateAndScaleEffects:(UIView?*)view??

{??

[UIView?animateWithDuration:0.35f?animations:^??

?????{??

/**

??????????*??@see???????http://donbe.blog.163.com/blog/static/138048021201061054243442/

??????????*

??????????*??@param?????transform???形變屬性(結(jié)構(gòu)體),可以利用這個屬性去對view做一些翻轉(zhuǎn)或者縮放.詳解請猛戳↑URL.

??????????*

??????????*??@method????valueWithCATransform3D:?此方法需要一個CATransform3D的結(jié)構(gòu)體.一些非詳細(xì)的講解可以看下面的URL

??????????*

??????????*??@see???????http://blog.csdn.net/liubo0_0/article/details/7452166

??????????*

??????????*/??


view.transform?=?CGAffineTransformMakeScale(0.001,?0.001);??


CABasicAnimation?*animation?=?[CABasicAnimation?animationWithKeyPath:@"transform"];??


//?向右旋轉(zhuǎn)45°縮小到最小,然后再從小到大推出.??

animation.toValue?=?[NSValue?valueWithCATransform3D:CATransform3DMakeRotation(M_PI,?0.70,?0.40,?0.80)];??


/**

??????????*?????其他效果:

??????????*?????從底部向上收縮一半后彈出

??????????*?????animation.toValue?=?[NSValue?valueWithCATransform3D:CATransform3DMakeRotation(M_PI,?0.0,?1.0,?0.0)];

??????????*

??????????*?????從底部向上完全收縮后彈出

??????????*?????animation.toValue?=?[NSValue?valueWithCATransform3D:CATransform3DMakeRotation(M_PI,?1.0,?0.0,?0.0)];

??????????*

??????????*?????左旋轉(zhuǎn)45°縮小到最小,然后再從小到大推出.

??????????*?????animation.toValue?=?[NSValue?valueWithCATransform3D:CATransform3DMakeRotation(M_PI,?0.50,?-0.50,?0.50)];

??????????*

??????????*?????旋轉(zhuǎn)180°縮小到最小,然后再從小到大推出.

??????????*?????animation.toValue?=?[NSValue?valueWithCATransform3D:CATransform3DMakeRotation(M_PI,?0.1,?0.2,?0.2)];

??????????*/??


animation.duration?=?0.45;??

animation.repeatCount?=?1;??

[view.layer?addAnimation:animation?forKey:nil];??


?????}??

?completion:^(BOOL?finished)??

?????{??

[UIView?animateWithDuration:0.35f?animations:^??

??????????{??

view.transform?=?CGAffineTransformMakeScale(1.0,?1.0);??

??????????}];??

?????}];??

}??


/**?CABasicAnimation

?*

?*??@see?https://developer.apple.com/library/mac/#documentation/cocoa/conceptual/CoreAnimation_guide/Articles/KVCAdditions.html

?*

?*??@brief??????????????????????便利構(gòu)造函數(shù)?animationWithKeyPath:?KeyPath需要一個字符串類型的參數(shù),實際上是一個

?*??????????????????????????????鍵-值編碼協(xié)議的擴展,參數(shù)必須是CALayer的某一項屬性,你的代碼會對應(yīng)的去改變該屬性的效果

?*??????????????????????????????具體可以填寫什么請參考上面的URL,切勿亂填!

?*??????????????????????????????例如這里填寫的是?@"transform.rotation.z"?意思就是圍繞z軸旋轉(zhuǎn),旋轉(zhuǎn)的單位是弧度.

?*??????????????????????????????這個動畫的效果是把view旋轉(zhuǎn)到最小,再旋轉(zhuǎn)回來.

?*??????????????????????????????你也可以填寫@"opacity"?去修改透明度...以此類推.修改layer的屬性,可以用這個類.

?*

?*??@param?toValue??????????????動畫結(jié)束的值.CABasicAnimation自己只有三個屬性(都很重要)(其他屬性是繼承來的),分別為:

?*??????????????????????????????fromValue(開始值),?toValue(結(jié)束值),?byValue(偏移值),

?!??????????????????????????????這三個屬性最多只能同時設(shè)置兩個;

?*??????????????????????????????他們之間的關(guān)系如下:

?*??????????????????????????????如果同時設(shè)置了fromValue和toValue,那么動畫就會從fromValue過渡到toValue;

?*??????????????????????????????如果同時設(shè)置了fromValue和byValue,那么動畫就會從fromValue過渡到fromValue?+?byValue;

?*??????????????????????????????如果同時設(shè)置了byValue??和toValue,那么動畫就會從toValue?-?byValue過渡到toValue;

?*

?*??????????????????????????????如果只設(shè)置了fromValue,那么動畫就會從fromValue過渡到當(dāng)前的value;

?*??????????????????????????????如果只設(shè)置了toValue??,那么動畫就會從當(dāng)前的value過渡到toValue;

?*??????????????????????????????如果只設(shè)置了byValue??,那么動畫就會從從當(dāng)前的value過渡到當(dāng)前value?+?byValue.

?*

?*??????????????????????????????可以這么理解,當(dāng)你設(shè)置了三個中的一個或多個,系統(tǒng)就會根據(jù)以上規(guī)則使用插值算法計算出一個時間差并

?*??????????????????????????????同時開啟一個Timer.Timer的間隔也就是這個時間差,通過這個Timer去不停地刷新keyPath的值.

?!??????????????????????????????而實際上,keyPath的值(layer的屬性)在動畫運行這一過程中,是沒有任何變化的,它只是調(diào)用了GPU去

?*??????????????????????????????完成這些顯示效果而已.

?*??????????????????????????????在這個動畫里,是設(shè)置了要旋轉(zhuǎn)到的弧度,根據(jù)以上規(guī)則,動畫將會從它當(dāng)前的弧度專旋轉(zhuǎn)到我設(shè)置的弧度.

?*

?*??@param?duration?????????????動畫持續(xù)時間

?*

?*??@param?timingFunction???????動畫起點和終點之間的插值計算,也就是說它決定了動畫運行的節(jié)奏,是快還是慢,還是先快后慢...

?*/??


/**?CAAnimationGroup

?*

?*??@brief??????????????????????顧名思義,這是一個動畫組,它允許多個動畫組合在一起并行顯示.比如這里設(shè)置了兩個動畫,

?*??????????????????????????????把他們加在動畫組里,一起顯示.例如你有幾個動畫,在動畫執(zhí)行的過程中需要同時修改動畫的某些屬性,

?*??????????????????????????????這時候就可以使用CAAnimationGroup.

?*

?*??@param?duration?????????????動畫持續(xù)時間,值得一提的是,如果添加到group里的子動畫不設(shè)置此屬性,group里的duration會統(tǒng)一

?*??????????????????????????????設(shè)置動畫(包括子動畫)的duration屬性;但是如果子動畫設(shè)置了duration屬性,那么group的duration屬性

?*??????????????????????????????的值不應(yīng)該小于每個子動畫中duration屬性的值,否則會造成子動畫顯示不全就停止了動畫.

?*

?*??@param?autoreverses?????????動畫完成后自動重新開始,默認(rèn)為NO.

?*

?*??@param?repeatCount??????????動畫重復(fù)次數(shù),默認(rèn)為0.

?*

?*??@param?animations???????????動畫組(數(shù)組類型),把需要同時運行的動畫加到這個數(shù)組里.

?*

?*??@note??addAnimation:forKey??這個方法的forKey參數(shù)是一個字符串,這個字符串可以隨意設(shè)置.

?*

?*??@note???????????????????????如果你需要在動畫group執(zhí)行結(jié)束后保存動畫效果的話,設(shè)置?fillMode?屬性,并且把

?*??????????????????????????????removedOnCompletion?設(shè)置為NO;

?*/??


+?(void)animationRotateAndScaleDownUp:(UIView?*)view??

{??

CABasicAnimation?*rotationAnimation?=?[CABasicAnimation?animationWithKeyPath:@"transform.rotation.z"];??

rotationAnimation.toValue?=?[NSNumber?numberWithFloat:(22?*?M_PI)?*?2];??

rotationAnimation.duration?=?0.35f;??

rotationAnimation.timingFunction?=?[CAMediaTimingFunction?functionWithName:kCAMediaTimingFunctionEaseInEaseOut];??


CABasicAnimation?*scaleAnimation?=?[CABasicAnimation?animationWithKeyPath:@"transform.scale"];??

scaleAnimation.toValue?=?[NSNumber?numberWithFloat:0.0];??

scaleAnimation.duration?=?0.35f;??

scaleAnimation.timingFunction?=?[CAMediaTimingFunction?functionWithName:kCAMediaTimingFunctionEaseInEaseOut];??


CAAnimationGroup?*animationGroup?=?[CAAnimationGroup?animation];??

animationGroup.duration?=?0.35f;??

animationGroup.autoreverses?=?YES;??

animationGroup.repeatCount?=?1;??

animationGroup.animations?=[NSArray?arrayWithObjects:rotationAnimation,?scaleAnimation,?nil?nil];??

[view.layer?addAnimation:animationGroup?forKey:@"animationGroup"];??

}??




#pragma?mark?-?Private?API??


+?(void)animationFlipFromTop:(UIView?*)view??

{??

CATransition?*animation?=?[CATransition?animation];??

[animation?setDuration:0.35f];??

[animation?setFillMode:kCAFillModeForwards];??

[animation?setTimingFunction:[CAMediaTimingFunction?functionWithName:kCAMediaTimingFunctionEaseOut]];??

[animation?setType:@"oglFlip"];??

[animation?setSubtype:@"fromTop"];??


[view.layer?addAnimation:animation?forKey:nil];??

}??


+?(void)animationFlipFromBottom:(UIView?*)view??

{??

CATransition?*animation?=?[CATransition?animation];??

[animation?setDuration:0.35f];??

[animation?setFillMode:kCAFillModeForwards];??

[animation?setTimingFunction:[CAMediaTimingFunction?functionWithName:kCAMediaTimingFunctionEaseOut]];??

[animation?setType:@"oglFlip"];??

[animation?setSubtype:@"fromBottom"];??


[view.layer?addAnimation:animation?forKey:nil];??

}??


+?(void)animationCubeFromLeft:(UIView?*)view??

{??

CATransition?*animation?=?[CATransition?animation];??

[animation?setDuration:0.35f];??

[animation?setFillMode:kCAFillModeForwards];??

[animation?setTimingFunction:[CAMediaTimingFunction?functionWithName:kCAMediaTimingFunctionEaseOut]];??

[animation?setType:@"cube"];??

[animation?setSubtype:@"fromLeft"];??


[view.layer?addAnimation:animation?forKey:nil];??

}??


+?(void)animationCubeFromRight:(UIView?*)view??

{??

CATransition?*animation?=?[CATransition?animation];??

[animation?setDuration:0.35f];??

[animation?setFillMode:kCAFillModeForwards];??

[animation?setTimingFunction:[CAMediaTimingFunction?functionWithName:kCAMediaTimingFunctionEaseOut]];??

[animation?setType:@"cube"];??

[animation?setSubtype:@"fromRight"];??


[view.layer?addAnimation:animation?forKey:nil];??

}??


+?(void)animationCubeFromTop:(UIView?*)view??

{??

CATransition?*animation?=?[CATransition?animation];??

[animation?setDuration:0.35f];??

[animation?setFillMode:kCAFillModeForwards];??

[animation?setTimingFunction:[CAMediaTimingFunction?functionWithName:kCAMediaTimingFunctionEaseOut]];??

[animation?setType:@"cube"];??

[animation?setSubtype:@"fromTop"];??


[view.layer?addAnimation:animation?forKey:nil];??

}??


+?(void)animationCubeFromBottom:(UIView?*)view??

{??

CATransition?*animation?=?[CATransition?animation];??

[animation?setDuration:0.35f];??

[animation?setFillMode:kCAFillModeForwards];??

[animation?setTimingFunction:[CAMediaTimingFunction?functionWithName:kCAMediaTimingFunctionEaseOut]];??

[animation?setType:@"cube"];??

[animation?setSubtype:@"fromBottom"];??


[view.layer?addAnimation:animation?forKey:nil];??

}??


+?(void)animationSuckEffect:(UIView?*)view??

{??

CATransition?*animation?=?[CATransition?animation];??

[animation?setDuration:0.35f];??

[animation?setFillMode:kCAFillModeForwards];??

[animation?setTimingFunction:[CAMediaTimingFunction?functionWithName:kCAMediaTimingFunctionEaseOut]];??

[animation?setType:@"suckEffect"];??


[view.layer?addAnimation:animation?forKey:nil];??

}??


+?(void)animationRippleEffect:(UIView?*)view??

{??

CATransition?*animation?=?[CATransition?animation];??

[animation?setDuration:0.35f];??

[animation?setFillMode:kCAFillModeForwards];??

[animation?setTimingFunction:[CAMediaTimingFunction?functionWithName:kCAMediaTimingFunctionEaseOut]];??

[animation?setType:@"rippleEffect"];??


[view.layer?addAnimation:animation?forKey:nil];??

}??


+?(void)animationCameraOpen:(UIView?*)view??

{??

CATransition?*animation?=?[CATransition?animation];??

[animation?setDuration:0.35f];??

[animation?setFillMode:kCAFillModeForwards];??

[animation?setTimingFunction:[CAMediaTimingFunction?functionWithName:kCAMediaTimingFunctionEaseOut]];??

[animation?setType:@"cameraIrisHollowOpen"];??

[animation?setSubtype:@"fromRight"];??


[view.layer?addAnimation:animation?forKey:nil];??

}??


+?(void)animationCameraClose:(UIView?*)view??

{??

CATransition?*animation?=?[CATransition?animation];??

[animation?setDuration:0.35f];??

[animation?setFillMode:kCAFillModeForwards];??

[animation?setTimingFunction:[CAMediaTimingFunction?functionWithName:kCAMediaTimingFunctionEaseOut]];??

[animation?setType:@"cameraIrisHollowClose"];??

[animation?setSubtype:@"fromRight"];??


[view.layer?addAnimation:animation?forKey:nil];??

}??

@end??

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容