iOS開發(fā)之UIView中的動畫屬性

源博客:(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í)行完后走這里的代碼塊  
    }];  
最后編輯于
?著作權歸作者所有,轉載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末难菌,一起剝皮案震驚了整個濱河市试溯,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌郊酒,老刑警劉巖遇绞,帶你破解...
    沈念sama閱讀 216,470評論 6 501
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場離奇詭異燎窘,居然都是意外死亡摹闽,警方通過查閱死者的電腦和手機,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 92,393評論 3 392
  • 文/潘曉璐 我一進店門褐健,熙熙樓的掌柜王于貴愁眉苦臉地迎上來付鹿,“玉大人,你說我怎么就攤上這事《尕遥” “怎么了俊抵?”我有些...
    開封第一講書人閱讀 162,577評論 0 353
  • 文/不壞的土叔 我叫張陵,是天一觀的道長坐梯。 經(jīng)常有香客問我徽诲,道長,這世上最難降的妖魔是什么吵血? 我笑而不...
    開封第一講書人閱讀 58,176評論 1 292
  • 正文 為了忘掉前任馏段,我火速辦了婚禮,結果婚禮上践瓷,老公的妹妹穿的比我還像新娘。我一直安慰自己亡蓉,他們只是感情好晕翠,可當我...
    茶點故事閱讀 67,189評論 6 388
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著砍濒,像睡著了一般淋肾。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上爸邢,一...
    開封第一講書人閱讀 51,155評論 1 299
  • 那天樊卓,我揣著相機與錄音,去河邊找鬼杠河。 笑死碌尔,一個胖子當著我的面吹牛,可吹牛的內(nèi)容都是我干的券敌。 我是一名探鬼主播唾戚,決...
    沈念sama閱讀 40,041評論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼待诅!你這毒婦竟也來了叹坦?” 一聲冷哼從身側響起,我...
    開封第一講書人閱讀 38,903評論 0 274
  • 序言:老撾萬榮一對情侶失蹤卑雁,失蹤者是張志新(化名)和其女友劉穎募书,沒想到半個月后,有當?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體测蹲,經(jīng)...
    沈念sama閱讀 45,319評論 1 310
  • 正文 獨居荒郊野嶺守林人離奇死亡莹捡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 37,539評論 2 332
  • 正文 我和宋清朗相戀三年,在試婚紗的時候發(fā)現(xiàn)自己被綠了扣甲。 大學時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片道盏。...
    茶點故事閱讀 39,703評論 1 348
  • 序言:一個原本活蹦亂跳的男人離奇死亡,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出荷逞,到底是詐尸還是另有隱情媒咳,我是刑警寧澤,帶...
    沈念sama閱讀 35,417評論 5 343
  • 正文 年R本政府宣布种远,位于F島的核電站涩澡,受9級特大地震影響,放射性物質發(fā)生泄漏坠敷。R本人自食惡果不足惜妙同,卻給世界環(huán)境...
    茶點故事閱讀 41,013評論 3 325
  • 文/蒙蒙 一艇劫、第九天 我趴在偏房一處隱蔽的房頂上張望懂拾。 院中可真熱鬧,春花似錦祟剔、人聲如沸限次。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,664評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽卖漫。三九已至费尽,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間羊始,已是汗流浹背旱幼。 一陣腳步聲響...
    開封第一講書人閱讀 32,818評論 1 269
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留突委,地道東北人柏卤。 一個月前我還...
    沈念sama閱讀 47,711評論 2 368
  • 正文 我出身青樓,卻偏偏與公主長得像匀油,于是被迫代替她去往敵國和親闷旧。 傳聞我的和親對象是個殘疾皇子,可洞房花燭夜當晚...
    茶點故事閱讀 44,601評論 2 353

推薦閱讀更多精彩內(nèi)容