ios 動畫基礎(chǔ)(二)

UIView Animation

UIView和動畫相關(guān)的category如下

UIView+UIViewAnimation.h
UIView+UIViewAnimationWithBlocks.h
UIView+UIViewKeyframeAnimations.h

基本的動畫使用

  1. 采用begin&commit

//改變view的大小
[UIView beginAnimations:nil context:nil];
[UIView setAnimationDuration:0.5];
self.frame = CGRectMake(_copyBtn.frame.origin.x, _copyBtn.frame.origin.y + _copyBtn.frame.size.height, _copyBtn.frame.size.width, tableHeight);
_tableView.frame = CGRectMake(0, 0, _copyBtn.bounds.size.width, tableHeight);
[UIView commitAnimations];

可以設(shè)置多種animation屬性噩凹,具體可以見`UIView+UIViewAnimation.h`
2. 采用block方式

    ~~~
    //options中的可以進(jìn)行疊加士复,具體可以見UIViewAnimationOptions
[UIView animateWithDuration:0.5 delay:1.2 options:UIViewAnimationOptionCurveEaseIn animations:^{
         //...
} completion:^(BOOL finished) {
        //...
}];

該方法具體可以見UIView+UIViewAnimationWithBlocks.h

彈簧效果動畫

[UIView animateWithDuration:0.5 delay:0.0 usingSpringWithDamping:0.5 initialSpringVelocity:4 options:UIViewAnimationOptionCurveEaseIn animations:^{
    self.frame = CGRectMake(_copyBtn.frame.origin.x, _copyBtn.frame.origin.y + _copyBtn.frame.size.height, _copyBtn.frame.size.width, tableHeight);
    _tableView.frame = CGRectMake(0, 0, _copyBtn.bounds.size.width, tableHeight);
} completion:^(BOOL finished) {
    //...
}];
  • usingSpringWithDamping:彈簧動畫的阻尼值讲岁,也就是相當(dāng)于摩擦力的大小颂鸿,該屬性的值從0.0到1.0之間,越靠近0李根,阻尼越小槽奕,彈動的幅度越大,反之阻尼越大房轿,彈動的幅度越小粤攒。
  • initialSpringVelocity:彈簧動畫的速率,或者說是動力囱持。值越小彈簧的動力越小夯接,彈簧拉伸的幅度越小,反之動力越大纷妆,彈簧拉伸的幅度越大盔几。這里需要注意的是,如果設(shè)置為0掩幢,表示忽略該屬性逊拍,由動畫持續(xù)時間和阻尼計算動畫的效果。

該方法具體可以見UIView+UIViewAnimationWithBlocks.h

過渡效果動畫

[UIView transitionWithView:_cardImageView duration:0.5 options:UIViewAnimationOptionTransitionFlipFromLeft animations:^{
    //...
} completion:^(BOOL finished) {
   //...
}];
// toView:替換后的視圖, fromView:被替換的視圖
+ (void)transitionFromView:(UIView *)fromView toView:(UIView *)toView duration:(NSTimeInterval)duration options:(UIViewAnimationOptions)options completion:(void (^ __nullable)(BOOL finished))completion NS_AVAILABLE_IOS(4_0);

這種很類似ppt中動畫效果际邻,具體的展示是通過options參數(shù)芯丧,可以見UIViewAnimationOptions

關(guān)鍵幀動畫

[UIView animateKeyframesWithDuration:1.2 delay:0.0 options:UIViewKeyframeAnimationOptionCalculationModeLinear animations:^{
    //添加第一幀動畫
    [UIView addKeyframeWithRelativeStartTime:0.0 relativeDuration:0.5 animations:^{
        _cardOne.frame = CGRectMake(0, 50, imageSize, imageSize);
    }];
    //添加第二幀動畫
    [UIView addKeyframeWithRelativeStartTime:0.2 relativeDuration:1 animations:^{
        //...
    }];
} completion:^(BOOL finished) {
     //...
}];

關(guān)鍵幀的動畫效果是由UIViewKeyframeAnimationOptions定義的,在添加關(guān)鍵幀的方法中參數(shù)含義表示

  • startTime:關(guān)鍵幀開始時間枯怖,該時間是相對整個關(guān)鍵幀動畫持續(xù)時間的相對時間注整,一般值在0到1之間。如果為0度硝,則表明這一關(guān)鍵幀從整個動畫的第0秒開始執(zhí)行肿轨,如果設(shè)為0.5,則表明從整個動畫的中間開始執(zhí)行蕊程。
  • relativeDuration:關(guān)鍵幀持續(xù)時間椒袍,該時間同樣是相對整個關(guān)鍵幀動畫持續(xù)時間的相對時間,一般值也在0到1之間藻茂。如果設(shè)為0.25驹暑,則表明這一關(guān)鍵幀的持續(xù)時間為整個動畫持續(xù)時間的四分之一。
  • animations:設(shè)置視圖動畫屬性的動畫閉包辨赐。
1.常規(guī)動畫屬性設(shè)置(可以同時選擇多個進(jìn)行設(shè)置)
UIViewAnimationOptionLayoutSubviews:子視圖跟隨父視圖一起動畫
UIViewAnimationOptionAllowUserInteraction:動畫過程中允許用戶交互优俘。
UIViewAnimationOptionBeginFromCurrentState:從當(dāng)前狀態(tài)開始運(yùn)行
UIViewAnimationOptionRepeat:重復(fù)運(yùn)行動畫。
UIViewAnimationOptionAutoreverse:動畫運(yùn)行到結(jié)束點(diǎn)后仍然以動畫方式回到初始點(diǎn)掀序,前提是設(shè)置動畫無限重復(fù)
UIViewAnimationOptionOverrideInheritedDuration:忽略外層嵌套動畫時間設(shè)置
UIViewAnimationOptionOverrideInheritedCurve:忽略外層嵌套動畫速度設(shè)置帆焕。
UIViewAnimationOptionAllowAnimatedContent:動畫過程中重繪視圖,僅適用于轉(zhuǎn)場動畫
UIViewAnimationOptionShowHideTransitionViews:視圖切換時直接隱藏舊視圖不恭、顯示新視圖叶雹,而不是將舊視圖從父視圖移除财饥,僅轉(zhuǎn)場動畫
UIViewAnimationOptionOverrideInheritedOptions:不繼承父動畫設(shè)置或動畫類型。

2.動畫速度控制(可從其中選擇一個設(shè)置)
UIViewAnimationOptionCurveEaseInOut:動畫先緩慢折晦,然后逐漸加速
UIViewAnimationOptionCurveEaseIn:動畫逐漸變慢
UIViewAnimationOptionCurveEaseOut:動畫逐漸加速
UIViewAnimationOptionCurveLinear:動畫勻速執(zhí)行钥星,默認(rèn)值。

3.轉(zhuǎn)場類型(僅適用于轉(zhuǎn)場動畫設(shè)置满着,可以從中選擇一個進(jìn)行設(shè)置谦炒,基本動畫、關(guān)鍵幀動畫不需要設(shè)置)
UIViewAnimationOptionTransitionNone:沒有轉(zhuǎn)場動畫效果漓滔。
UIViewAnimationOptionTransitionFlipFromLeft:從左側(cè)翻轉(zhuǎn)效果编饺。
UIViewAnimationOptionTransitionFlipFromRight:從右側(cè)翻轉(zhuǎn)效果响驴。
UIViewAnimationOptionTransitionCurlUp:向后翻頁的動畫過渡效果。    
UIViewAnimationOptionTransitionCurlDown:向前翻頁的動畫過渡效果秽誊。    
UIViewAnimationOptionTransitionCrossDissolve:舊視圖溶解消失顯示下一個新視圖的效果锅论。    
UIViewAnimationOptionTransitionFlipFromTop:從上方翻轉(zhuǎn)效果楣号。    
UIViewAnimationOptionTransitionFlipFromBottom:從底部翻轉(zhuǎn)效果炫狱。

CAMediaTiming

CAMediaTiming是一個協(xié)議,CALayerCAAnimation都實現(xiàn)該協(xié)議嬉荆;描管理動畫過程的時間鄙早,主要屬性如下

//動畫開始之前的的延遲時間,相對于父級對象的開始時間椅亚;設(shè)置延遲時需要注意CACurrentMediaTime()+延遲的秒數(shù)
@property CFTimeInterval beginTime;

//動畫一次運(yùn)行的時間呀舔,默認(rèn)為0.25s
@property CFTimeInterval duration;

//動畫執(zhí)行的速度,是相對父級對象而言,如果子對象是2.0的速度,那么子對象的2s相對于父對象時間中的1s
@property float speed;

//動畫開始時的偏移粥庄,即從第timeOffset直接開始執(zhí)行豺妓,但仍然會執(zhí)行一個完整的時長,比如duration是5s,offset是2s琳拭,會變成先2s-5s執(zhí)行白嘁,然后0s-2s執(zhí)行
@property CFTimeInterval timeOffset;

//動畫重復(fù)運(yùn)行的次數(shù),默認(rèn)為1次
@property float repeatCount;

//動畫重復(fù)運(yùn)行的總時間
@property CFTimeInterval repeatDuration;

//動畫是否自動回轉(zhuǎn)運(yùn)行一次絮缅,默認(rèn)為no
@property BOOL autoreverses;

//決定動畫對象在非active時間段的行為耕魄。比如動畫開始之前,動畫結(jié)束之后
//如果想讓對象保持顯示動畫執(zhí)行后的狀態(tài)允扇,需要設(shè)置removedOnCompletion為NO考润,fillMode為kCAFillModeForwards 
@property(copy) NSString *fillMode;

Layer Animation

可以參看我之前發(fā)布的ios 動畫基礎(chǔ)(一)额划,這邊寫了一個小demo
利用AnimationGroup實現(xiàn)卡片切換動畫俊戳,CATransition展示的過渡效果

demo

git 地址

iOS10-UIViewPropertyAnimator

參考

  1. animation in ios
  2. CALayer 和 UIView 區(qū)別
  3. CALayers
  4. UIView animation展示
  5. 幾種UIViewAnimation的說明
  6. View-Layer 協(xié)作
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個濱河市渐北,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌恃锉,老刑警劉巖搀菩,帶你破解...
    沈念sama閱讀 216,372評論 6 498
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場離奇詭異破托,居然都是意外死亡,警方通過查閱死者的電腦和手機(jī)土砂,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 92,368評論 3 392
  • 文/潘曉璐 我一進(jìn)店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來萝映,“玉大人吴叶,你說我怎么就攤上這事⌒虮郏” “怎么了?”我有些...
    開封第一講書人閱讀 162,415評論 0 353
  • 文/不壞的土叔 我叫張陵贸宏,是天一觀的道長造寝。 經(jīng)常有香客問我,道長诫龙,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 58,157評論 1 292
  • 正文 為了忘掉前任鲫咽,我火速辦了婚禮分尸,結(jié)果婚禮上孔庭,老公的妹妹穿的比我還像新娘材蛛。我一直安慰自己圆到,他們只是感情好,可當(dāng)我...
    茶點(diǎn)故事閱讀 67,171評論 6 388
  • 文/花漫 我一把揭開白布豆赏。 她就那樣靜靜地躺著挣菲,像睡著了一般富稻。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上白胀,一...
    開封第一講書人閱讀 51,125評論 1 297
  • 那天椭赋,我揣著相機(jī)與錄音,去河邊找鬼或杠。 笑死纹份,一個胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的廷痘。 我是一名探鬼主播侦啸,決...
    沈念sama閱讀 40,028評論 3 417
  • 文/蒼蘭香墨 我猛地睜開眼箱残,長吁一口氣:“原來是場噩夢啊……” “哼趾娃!你這毒婦竟也來了世囊?” 一聲冷哼從身側(cè)響起防嗡,我...
    開封第一講書人閱讀 38,887評論 0 274
  • 序言:老撾萬榮一對情侶失蹤院究,失蹤者是張志新(化名)和其女友劉穎康愤,沒想到半個月后半开,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體鉴未,經(jīng)...
    沈念sama閱讀 45,310評論 1 310
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡枢冤,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 37,533評論 2 332
  • 正文 我和宋清朗相戀三年,在試婚紗的時候發(fā)現(xiàn)自己被綠了铜秆。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片淹真。...
    茶點(diǎn)故事閱讀 39,690評論 1 348
  • 序言:一個原本活蹦亂跳的男人離奇死亡,死狀恐怖连茧,靈堂內(nèi)的尸體忽然破棺而出核蘸,到底是詐尸還是另有隱情,我是刑警寧澤啸驯,帶...
    沈念sama閱讀 35,411評論 5 343
  • 正文 年R本政府宣布客扎,位于F島的核電站,受9級特大地震影響罚斗,放射性物質(zhì)發(fā)生泄漏徙鱼。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,004評論 3 325
  • 文/蒙蒙 一针姿、第九天 我趴在偏房一處隱蔽的房頂上張望袱吆。 院中可真熱鬧,春花似錦搓幌、人聲如沸杆故。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,659評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽处铛。三九已至饲趋,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間撤蟆,已是汗流浹背奕塑。 一陣腳步聲響...
    開封第一講書人閱讀 32,812評論 1 268
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留家肯,地道東北人龄砰。 一個月前我還...
    沈念sama閱讀 47,693評論 2 368
  • 正文 我出身青樓,卻偏偏與公主長得像讨衣,于是被迫代替她去往敵國和親换棚。 傳聞我的和親對象是個殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 44,577評論 2 353

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

  • 在iOS中隨處都可以看到絢麗的動畫效果反镇,實現(xiàn)這些動畫的過程并不復(fù)雜固蚤,今天將帶大家一窺ios動畫全貌。在這里你可以看...
    每天刷兩次牙閱讀 8,485評論 6 30
  • 在iOS中隨處都可以看到絢麗的動畫效果歹茶,實現(xiàn)這些動畫的過程并不復(fù)雜夕玩,今天將帶大家一窺iOS動畫全貌。在這里你可以看...
    F麥子閱讀 5,110評論 5 13
  • 先看看CAAnimation動畫的繼承結(jié)構(gòu) CAAnimation{ CAPropertyAnimation { ...
    時間不會倒著走閱讀 1,649評論 0 1
  • 在iOS實際開發(fā)中常用的動畫無非是以下四種:UIView動畫惊豺,核心動畫燎孟,幀動畫,自定義轉(zhuǎn)場動畫尸昧。 1.UIView...
    請叫我周小帥閱讀 3,092評論 1 23
  • 目錄 ** UIView 動畫 ** ** Core Animation ** ** FaceBook POP動畫...
    方向_4d0d閱讀 1,596評論 0 3