源博客:(http://www.cnblogs.com/pengyingh/articles/2378777.html)
areAnimationsEnabled返回一個布爾值表示動畫是否結束
+ (BOOL)areAnimationsEnabled返回值如果動畫結束返回YES,否則NO。
beginAnimations:context:開始一個動畫塊
+ (void)beginAnimations:(NSString *)animationID context:(void *)context
參數animationID動畫塊內部應用程序標識用來傳遞給動畫代理消息-這個選擇器運用setAnimationWillStartSelector:和setAnimationDidStopSelector: 方法來設置。context附加的應用程序信息用來傳遞給動畫代理消息-這個選擇器使用setAnimationWillStartSelector: 和setAnimationDidStopSelector: 方法。討論這個值改變是因為設置了一些需要在動畫塊中產生動畫的屬性。動畫塊可以被嵌套。如果在沒有在動畫塊中調用那么setAnimation類方法將什么都不做。使用 beginAnimations:context:來開始一個動畫塊并用commitAnimations類方法來結束一個動畫塊。 結束一個動畫塊并開始當他在動畫塊外時。+ (void)commitAnimations如果當前的動畫塊是最外層的動畫塊,當應用程序返回到循環運行時開始動畫塊。動畫在一個獨立的線程中所有應用程序不會中斷。使用這個方法,多個動畫可以被實現。查看setAnimationBeginsFromCurrentState:來了解如果開始一個動畫當另外一個動畫在播放的時候。
layerClass返回類用來創建這一個本類的layer實例對象。
+ (Class)layerClass
返回值一個用來創建視圖layer的類重寫子類來指定一個自定義類用來顯示。當在創建視圖layer時候調用。默認的值是CALayer類對象。
setAnimationBeginsFromCurrentState:設置動畫從當前狀態開始播放。
+ (void)setAnimationBeginsFromCurrentState:(BOOL)fromCurrentState
參數fromCurrentStateYES如果動畫需要從他們當前狀態開始播放。否則為NO。討論如果設置為YES那么當動畫在運行過程中,當前視圖的位置將會作為新的動畫的開始狀態。如果設置為NO,當前動畫結束前新動畫將使用視圖最後狀態的位置作為開始狀態。這個方法將不會做任何事情如果動畫沒有運行或者沒有在動畫塊外調用。使用beginAnimations:context:類方法來開始并用commitAnimations類方法來結束動畫塊。默認值是NO。
setAnimationCurve:設置動畫塊中的動畫屬性變化的曲線。
+ (void)setAnimationCurve:(UIViewAnimationCurve)curve
討論動畫曲線是動畫運行過程中相對的速度。如果在動畫塊外調用這個方法將會無效。使用 beginAnimations:context:類方法來開始動畫塊并用commitAnimations來結束動畫塊。默認動畫曲線的值是UIViewAnimationCurveEaseInOut。
setAnimationDelay:在動畫塊中設置動畫的延遲屬性(以秒為單位)
+ (void)setAnimationDelay:(NSTimeInterval)delay
討論這個方法在動畫塊外調用無效。使用beginAnimations:context: 類方法開始一個動畫塊并用commitAnimations類方法結束動畫塊。默認的動畫延遲是0.0秒。 內容來自泠云天天在線
setAnimationDelegate:設置動畫消息的代理。
+ (void)setAnimationDelegate:(id)delegate參數delegate你可以用setAnimationWillStartSelector:和setAnimationDidStopSelector:
方法來設置接收代理消息的對象。討論這個方法在動畫塊外沒有任何效果。使用beginAnimations:context:類方法開始一個動畫塊并用commitAnimations類方法結束一個動畫塊。默認值是nil
setAnimationDidStopSelector: 設置消息給動畫代理當動畫停止的時候。
+ (void)setAnimationDidStopSelector:(SEL)selector
參數selector當動畫結束的時候發送給動畫代理。默認值是NULL。這個選擇者須有下面方法的簽名:animationFinished:(NSString *)animationID finished:(BOOL)finished context:(void *)context。animationID一個應用程序提供的標識符。和傳給beginAnimations:context: 相同的參數。這個參數可以為空。finished如果動畫在停止前完成那返回YES;否則就是NO。context一個可選的應用程序內容提供者。和beginAnimations:context: 方法相同的參數。可以為空。 本文來自泠云天天在線討論這個方法在動畫塊外沒有任何效果。使用beginAnimations:context: 類方法來開始一個動畫塊并用commitAnimations類方法結束。默認值是NULL。
setAnimationDuration:設置動畫塊中的動畫持續時間(用秒)
+ (void)setAnimationDuration:(NSTimeInterval)duration
參數duration一段動畫持續的時間。討論這個方法在動畫塊外沒有效果。使用beginAnimations:context: 類方法來開始一個動畫塊并用commitAnimations類方法來結束一個動畫塊。默認值是0.2。
setAnimationRepeatAutoreverses:設置動畫塊中的動畫效果是否自動重復播放。
+ (void)setAnimationRepeatAutoreverses:(BOOL)repeatAutoreverses
參數repeatAutoreverses如果動畫自動重復就是YES否則就是NO。討論自動重復是當動畫向前播放結束後再重頭開始播放。使用setAnimationRepeatCount: 類方法來指定動畫自動重播的時間。如果重復數為0或者在動畫塊外那將沒有任何效果。使用beginAnimations:context:類方法來開始一個動畫塊并用commitAnimations方法來結束一個動畫塊。默認值是NO。
setAnimationRepeatCount:設置動畫在動畫模塊中的重復次數
+ (void)setAnimationRepeatCount:(float)repeatCount
參數repeatCount動畫重復的次數,這個值可以是分數。討論這個屬性在動畫塊外沒有任何作用。使用beginAnimations:context:類方法來開始一個動畫塊并用commitAnimations類方法來結束。默認動畫不循環。
setAnimationsEnabled:設置是否激活動畫
+ (void)setAnimationsEnabled:(BOOL)enabled
參數enabled如果是YES那就激活動畫;否則就是NO討論當動畫參數沒有被激活那么動畫屬性的改變將被忽略。默認動畫是被激活的。
setAnimationStartDate:設置在動畫塊內部動畫屬性改變的開始時間
+ (void)setAnimationStartDate:(NSDate *)startTime
參數startTime一個開始動畫的時間討論使用beginAnimations:context:類方法來開始一個動畫塊并用commitAnimations類方法來結束動畫塊。默認的開始時間值由CFAbsoluteTimeGetCurrent方法來返回。
setAnimationTransition:forView:cache:在動畫塊中為視圖設置過渡
+ (void)setAnimationTransition:(UIViewAnimationTransition)transition forView:(UIView *)view cache:(BOOL)cache
參數transition把一個過渡效果應用到視圖中。可能的值定義在UIViewAnimationTransition中。view需要過渡的視圖對象。cache如果是YES,那么在開始和結束圖片視圖渲染一次并在動畫中創建幀;否則,視圖將會在每一幀都渲染。例如緩存,你不需要在視圖轉變中不停的更新,你只需要等到轉換完成再去更新視圖。
討論如果你想要在轉變過程中改變視圖的外貌。舉個例子,文件從一個視圖到另一個視圖,然後使用一個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:當動畫開始時發送一條消息到動畫代理
+ (void)setAnimationWillStartSelector:(SEL)selector
參數selector在動畫開始前向動畫代理發送消息。默認值是NULL。這個selector必須由和beginAnimations:context: 方法相同的參數,一個任選的程序標識和內容。這些參數都可以是nil。討論這個方法在動畫塊外沒有任何作用。使用beginAnimations:context:類方法來開始一個動畫塊并用commitAnimations類方法來結束
UIView基礎動畫Animation使用參數配置
在ios開發中一般用到的基礎動畫有以下幾種,所有的動畫參數配置大致相同,但是有時候在開發過程中很少這樣配置一般使用代碼塊比較方便,而且代碼也比較簡單以下是常用基礎動畫類型的一個配置
- (void)transitionAnimation// 轉場動畫 {
//設置動畫名稱,方便代理方法判斷是哪個動畫
[UIView beginAnimations:@"TransitionAnimation" context:NULL];
//設置動畫時長
[UIView setAnimationDuration:3.0];
//設置動畫的變化規律 --有以下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設置初始狀態 并對其他進行配置(這里只是讓View變成之前的參數而已,如果不需要就可以去掉這段代碼)
[_view setTransform:CGAffineTransformIdentity];
[_view setBackgroundColor:[UIColor blackColor]];
[_view setAlpha:1];
[_view setCenter:CGPointMake(50, 50)];
// 設置代理
[UIView setAnimationDelegate:self];
// 動畫結束執行代理方法(這里走得時代理方法也可以走其他動畫方法就可以形成動畫組)
[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
{
// 判斷是哪個動畫 然后執行相應操作
if ([animationId isEqualToString:@"ChangeColorAnimation"]) {
[self changeAlphaAnimation];
}
if ([animationId isEqualToString:@"ChangeAlphaAnimation"]) {
[self transitionAnimation];
}
}
下面我們來看下代碼塊的用法,代碼塊的話用起來很方便并且可以執行回調,在APP點擊菜動態單切換兩個View或是其他動畫
[UIView animateWithDuration:0.5 animations:^{
[UIView setAnimationDelay:0.8];//配置動畫時延
_currentView.center = CGPointMake(X,Y);//可以對多個view進行我們想要的動畫配置
newView.center = CGPointMake(X,Y);
} completion:^(BOOL finished) {
//執行完后走這里的代碼塊
}];