源博客:(http://www.cnblogs.com/pengyingh/articles/2378777.html)
areAnimationsEnabled返回一個布爾值表示動畫是否結束
+ (BOOL)areAnimationsEnabled返回值如果動畫結束返回YES畦娄,否則NO刁标。
beginAnimations:context:開始一個動畫塊
+ (void)beginAnimations:(NSString *)animationID context:(void *)context
參數(shù)animationID動畫塊內(nèi)部應用程序標識用來傳遞給動畫代理消息-這個選擇器運用setAnimationWillStartSelector:和setAnimationDidStopSelector: 方法來設置鱼冀。context附加的應用程序信息用來傳遞給動畫代理消息-這個選擇器使用setAnimationWillStartSelector: 和setAnimationDidStopSelector: 方法挪凑。討論這個值改變是因為設置了一些需要在動畫塊中產(chǎn)生動畫的屬性。動畫塊可以被嵌套。如果在沒有在動畫塊中調(diào)用那么setAnimation類方法將什么都不做。使用 beginAnimations:context:來開始一個動畫塊并用commitAnimations類方法來結束一個動畫塊堂鲜。 結束一個動畫塊并開始當他在動畫塊外時。+ (void)commitAnimations如果當前的動畫塊是最外層的動畫塊护奈,當應用程序返回到循環(huán)運行時開始動畫塊缔莲。動畫在一個獨立的線程中所有應用程序不會中斷。使用這個方法霉旗,多個動畫可以被實現(xiàn)痴奏。查看setAnimationBeginsFromCurrentState:來了解如果開始一個動畫當另外一個動畫在播放的時候。
layerClass返回類用來創(chuàng)建這一個本類的layer實例對象厌秒。
+ (Class)layerClass
返回值一個用來創(chuàng)建視圖layer的類重寫子類來指定一個自定義類用來顯示读拆。當在創(chuàng)建視圖layer時候調(diào)用。默認的值是CALayer類對象简僧。
setAnimationBeginsFromCurrentState:設置動畫從當前狀態(tài)開始播放建椰。
+ (void)setAnimationBeginsFromCurrentState:(BOOL)fromCurrentState
參數(shù)fromCurrentStateYES如果動畫需要從他們當前狀態(tài)開始播放。否則為NO岛马。討論如果設置為YES那么當動畫在運行過程中棉姐,當前視圖的位置將會作為新的動畫的開始狀態(tài)。如果設置為NO啦逆,當前動畫結束前新動畫將使用視圖最後狀態(tài)的位置作為開始狀態(tài)伞矩。這個方法將不會做任何事情如果動畫沒有運行或者沒有在動畫塊外調(diào)用。使用beginAnimations:context:類方法來開始并用commitAnimations類方法來結束動畫塊夏志。默認值是NO乃坤。
setAnimationCurve:設置動畫塊中的動畫屬性變化的曲線。
+ (void)setAnimationCurve:(UIViewAnimationCurve)curve
討論動畫曲線是動畫運行過程中相對的速度沟蔑。如果在動畫塊外調(diào)用這個方法將會無效湿诊。使用 beginAnimations:context:類方法來開始動畫塊并用commitAnimations來結束動畫塊。默認動畫曲線的值是UIViewAnimationCurveEaseInOut瘦材。
setAnimationDelay:在動畫塊中設置動畫的延遲屬性(以秒為單位)
+ (void)setAnimationDelay:(NSTimeInterval)delay
討論這個方法在動畫塊外調(diào)用無效厅须。使用beginAnimations:context: 類方法開始一個動畫塊并用commitAnimations類方法結束動畫塊。默認的動畫延遲是0.0秒食棕。 內(nèi)容來自泠云天天在線
setAnimationDelegate:設置動畫消息的代理朗和。
+ (void)setAnimationDelegate:(id)delegate參數(shù)delegate你可以用setAnimationWillStartSelector:和setAnimationDidStopSelector:
方法來設置接收代理消息的對象。討論這個方法在動畫塊外沒有任何效果簿晓。使用beginAnimations:context:類方法開始一個動畫塊并用commitAnimations類方法結束一個動畫塊眶拉。默認值是nil
setAnimationDidStopSelector: 設置消息給動畫代理當動畫停止的時候。
+ (void)setAnimationDidStopSelector:(SEL)selector
參數(shù)selector當動畫結束的時候發(fā)送給動畫代理憔儿。默認值是NULL忆植。這個選擇者須有下面方法的簽名:animationFinished:(NSString *)animationID finished:(BOOL)finished context:(void *)context。animationID一個應用程序提供的標識符。和傳給beginAnimations:context: 相同的參數(shù)朝刊。這個參數(shù)可以為空吴侦。finished如果動畫在停止前完成那返回YES;否則就是NO坞古。context一個可選的應用程序內(nèi)容提供者。和beginAnimations:context: 方法相同的參數(shù)劫樟』痉悖可以為空。 本文來自泠云天天在線討論這個方法在動畫塊外沒有任何效果叠艳。使用beginAnimations:context: 類方法來開始一個動畫塊并用commitAnimations類方法結束奶陈。默認值是NULL。
setAnimationDuration:設置動畫塊中的動畫持續(xù)時間(用秒)
+ (void)setAnimationDuration:(NSTimeInterval)duration
參數(shù)duration一段動畫持續(xù)的時間附较。討論這個方法在動畫塊外沒有效果吃粒。使用beginAnimations:context: 類方法來開始一個動畫塊并用commitAnimations類方法來結束一個動畫塊。默認值是0.2拒课。
setAnimationRepeatAutoreverses:設置動畫塊中的動畫效果是否自動重復播放徐勃。
+ (void)setAnimationRepeatAutoreverses:(BOOL)repeatAutoreverses
參數(shù)repeatAutoreverses如果動畫自動重復就是YES否則就是NO。討論自動重復是當動畫向前播放結束後再重頭開始播放早像。使用setAnimationRepeatCount: 類方法來指定動畫自動重播的時間僻肖。如果重復數(shù)為0或者在動畫塊外那將沒有任何效果。使用beginAnimations:context:類方法來開始一個動畫塊并用commitAnimations方法來結束一個動畫塊卢鹦。默認值是NO臀脏。
setAnimationRepeatCount:設置動畫在動畫模塊中的重復次數(shù)
+ (void)setAnimationRepeatCount:(float)repeatCount
參數(shù)repeatCount動畫重復的次數(shù),這個值可以是分數(shù)冀自。討論這個屬性在動畫塊外沒有任何作用揉稚。使用beginAnimations:context:類方法來開始一個動畫塊并用commitAnimations類方法來結束。默認動畫不循環(huán)熬粗。
setAnimationsEnabled:設置是否激活動畫
+ (void)setAnimationsEnabled:(BOOL)enabled
參數(shù)enabled如果是YES那就激活動畫搀玖;否則就是NO討論當動畫參數(shù)沒有被激活那么動畫屬性的改變將被忽略。默認動畫是被激活的荐糜。
setAnimationStartDate:設置在動畫塊內(nèi)部動畫屬性改變的開始時間
+ (void)setAnimationStartDate:(NSDate *)startTime
參數(shù)startTime一個開始動畫的時間討論使用beginAnimations:context:類方法來開始一個動畫塊并用commitAnimations類方法來結束動畫塊巷怜。默認的開始時間值由CFAbsoluteTimeGetCurrent方法來返回。
setAnimationTransition:forView:cache:在動畫塊中為視圖設置過渡
+ (void)setAnimationTransition:(UIViewAnimationTransition)transition forView:(UIView *)view cache:(BOOL)cache
參數(shù)transition把一個過渡效果應用到視圖中暴氏⊙铀埽可能的值定義在UIViewAnimationTransition中。view需要過渡的視圖對象答渔。cache如果是YES关带,那么在開始和結束圖片視圖渲染一次并在動畫中創(chuàng)建幀;否則,視圖將會在每一幀都渲染宋雏。例如緩存芜飘,你不需要在視圖轉變中不停的更新,你只需要等到轉換完成再去更新視圖磨总。
討論如果你想要在轉變過程中改變視圖的外貌嗦明。舉個例子,文件從一個視圖到另一個視圖蚪燕,然後使用一個UIView子類的容器視圖娶牌,
如下:
1.Begin an animation block.1.開始一個動畫塊。
2.Set the transition on the container view.2.在容器視圖中設置轉換馆纳。
3.Remove the subview from the container view. 3.在容器視圖中移除子視圖诗良。
4.Add the new subview to the container view.4.在容器視圖中添加子視圖。
5.Commit the animation block. 5.結束動畫塊鲁驶。
setAnimationWillStartSelector:當動畫開始時發(fā)送一條消息到動畫代理
+ (void)setAnimationWillStartSelector:(SEL)selector
參數(shù)selector在動畫開始前向動畫代理發(fā)送消息鉴裹。默認值是NULL。這個selector必須由和beginAnimations:context: 方法相同的參數(shù)钥弯,一個任選的程序標識和內(nèi)容径荔。這些參數(shù)都可以是nil。討論這個方法在動畫塊外沒有任何作用脆霎。使用beginAnimations:context:類方法來開始一個動畫塊并用commitAnimations類方法來結束
UIView基礎動畫Animation使用參數(shù)配置
在ios開發(fā)中一般用到的基礎動畫有以下幾種猖凛,所有的動畫參數(shù)配置大致相同,但是有時候在開發(fā)過程中很少這樣配置一般使用代碼塊比較方便绪穆,而且代碼也比較簡單以下是常用基礎動畫類型的一個配置
- (void)transitionAnimation// 轉場動畫 {
//設置動畫名稱辨泳,方便代理方法判斷是哪個動畫
[UIView beginAnimations:@"TransitionAnimation" context:NULL];
//設置動畫時長
[UIView setAnimationDuration:3.0];
//設置動畫的變化規(guī)律 --有以下4中枚舉值
// UIViewAnimationCurveEaseInOut, 開始和結束減速 // slow at beginning and end
// UIViewAnimationCurveEaseIn, // slow at beginning
// UIViewAnimationCurveEaseOut, // slow at end
// UIViewAnimationCurveLinear 勻速
[UIView setAnimationCurve:UIViewAnimationCurveEaseInOut];
// 對View設置轉場動畫方向 有以下枚舉方向
// typedef NS_ENUM(NSInteger, UIViewAnimationTransition) {
// UIViewAnimationTransitionNone,
// UIViewAnimationTransitionFlipFromLeft,
// UIViewAnimationTransitionFlipFromRight,
// UIViewAnimationTransitionCurlUp,
// UIViewAnimationTransitionCurlDown,
// };
[UIView setAnimationTransition:UIViewAnimationTransitionFlipFromRight forView:_view cache:NO];
// 對View設置初始狀態(tài) 并對其他進行配置(這里只是讓View變成之前的參數(shù)而已,如果不需要就可以去掉這段代碼)
[_view setTransform:CGAffineTransformIdentity];
[_view setBackgroundColor:[UIColor blackColor]];
[_view setAlpha:1];
[_view setCenter:CGPointMake(50, 50)];
// 設置代理
[UIView setAnimationDelegate:self];
// 動畫結束執(zhí)行代理方法(這里走得時代理方法也可以走其他動畫方法就可以形成動畫組)
[UIView setAnimationDidStopSelector:@selector(animationDidStop:finished:context:)];
//動畫結束
[UIView commitAnimations];
}
- (void)changeAlphaAnimation //改變透明度動畫
{
[UIView beginAnimations:@"ChangeAlphaAnimation" context:NULL];
[UIView setAnimationDuration:2.0];
[UIView setAnimationCurve:UIViewAnimationCurveEaseInOut];
[_view setAlpha:0.2];
[UIView setAnimationDelegate:self];
[UIView setAnimationDidStopSelector:@selector(animationDidStop:finished:context:)];
[UIView commitAnimations];
}
- (void)changeColorAnimation // 改變顏色動畫
{
[UIView beginAnimations:@"ChangeColorAnimation" context:NULL];
[UIView setAnimationDuration:2.0];
[UIView setAnimationCurve:UIViewAnimationCurveEaseInOut];
[_view setBackgroundColor:[UIColor redColor]];
[UIView setAnimationDelegate:self];
[UIView setAnimationDidStopSelector:@selector(animationDidStop:finished:context:)];
[UIView commitAnimations];
}
- (void)rotationAnimation // 旋轉動畫
{
[UIView beginAnimations:@"RotationAnimation" context:NULL];
[UIView setAnimationDuration:2.0];
[UIView setAnimationCurve:UIViewAnimationCurveEaseInOut];
[_view setTransform:CGAffineTransformRotate(_view.transform, M_PI_4)];
[UIView setAnimationDelegate:self];
[UIView setAnimationDidStopSelector:@selector(changeColorAnimation)];
[UIView commitAnimations];
}
- (void)scareAnimation //放大縮小動畫
{
[UIView beginAnimations:@"ScareAnimation" context:NULL];
[UIView setAnimationDuration:2.0];
[UIView setAnimationCurve:UIViewAnimationCurveEaseInOut];
[UIView setAnimationDelegate:self];
[_view setTransform:CGAffineTransformScale(_view.transform, 2, 2)];
[UIView setAnimationDidStopSelector:@selector(rotationAnimation)];
[UIView commitAnimations];
}
- (void)positionAnimation //位移動畫
{
[UIView beginAnimations:@"PositionAnition" context:NULL];
[UIView setAnimationDuration:2.0];
[UIView setAnimationCurve:UIViewAnimationCurveEaseInOut];
[UIView setAnimationDelegate:self];
_view.center = CGPointMake(CGRectGetMidX(self.view.bounds), CGRectGetMidY(self.view.bounds));
[UIView setAnimationDidStopSelector:@selector(scareAnimation)];
[UIView commitAnimations];
}
// 代理方法玖院,檢測動畫介紹然后進行其他操作 還有其他兩個方法
- (void)animationDidStop:(NSString *)animationId finished:(NSNumber *)finished context:(voidvoid *)context
{
// 判斷是哪個動畫 然后執(zhí)行相應操作
if ([animationId isEqualToString:@"ChangeColorAnimation"]) {
[self changeAlphaAnimation];
}
if ([animationId isEqualToString:@"ChangeAlphaAnimation"]) {
[self transitionAnimation];
}
}
下面我們來看下代碼塊的用法菠红,代碼塊的話用起來很方便并且可以執(zhí)行回調(diào),在APP點擊菜動態(tài)單切換兩個View或是其他動畫
[UIView animateWithDuration:0.5 animations:^{
[UIView setAnimationDelay:0.8];//配置動畫時延
_currentView.center = CGPointMake(X,Y);//可以對多個view進行我們想要的動畫配置
newView.center = CGPointMake(X,Y);
} completion:^(BOOL finished) {
//執(zhí)行完后走這里的代碼塊
}];