那我們來看看系統究竟幫我們做了哪些東西。
如果你自己設定了動畫型別和動畫時間,表現出來就是你指定的動畫,如果沒有,那麼系統會自動幫我們做了動畫型別和動畫時間(這就是隱式動畫)。
note:catransaction概念隱式動畫真正背後執行的原因:catransaction沒有屬性或者例項方法,並且也不能用+alloc和-init方法建立它。但是可以用+begin和+commit分別來入棧或者出棧
core animation在每個run loop週期中自動開始一次新的事務(run loop是ios負責收集使用者輸入,處理定時器或者網路事件並且重新繪製螢幕的東西),即使你不顯式的用[catransaction begin]開始一次事務,任何在一次run loop迴圈中屬性的改變都會被集中起來,然後做一次0.25秒的動畫。如果你不用系統的動畫模式,要自定義,最原始的樣子就是下面
- (ibaction)changecolor
先上**,讓大家看看問題。
@inte***ce
viewcontroller ()
@property (nonatomic, weak) iboutlet
uiview *layerview;
@end
@implementation
viewcontroller
- (void)viewdidload
- (ibaction)changecolor
執行程式,你會發現當按下按鈕,圖層顏色瞬間切換到新的值,而不是之前平滑過渡的動畫。發生了什麼呢?
先給結論:
1、是給uiview做的動畫,那麼一定要用uiview層的動畫模式(uiview有兩個方法,+beginanimations:context:和+commitanimations)。
2、是給calayer做動畫,那麼一定用catransaction begin相關的方法。
原因就是上面程式出現的問題:uiview關聯的圖層禁用了隱式動畫,造成了動畫沒有。
再深入一點,隱式動畫是如何被uikit禁用掉呢?
解決這個問題,先看看這個系統大概是如何實現隱式動畫?
calayer的屬性被修改時候,layer首先檢測它是否有委託,很顯然,uiview做了layer的**,再uiview內部實行了-actionforkey:方法,估計如果不是呼叫uiview的動畫方法時,實現的協議方法actionforkey:裡面返回乙個nil,如果呼叫uiview的自己的動畫方法,就返回值,產生了動畫。1、有**物件,它會呼叫-actionforkey:方法,
2、沒有**物件,去找圖層動畫的action(以那種動畫展現),它最後最後會呼叫,defaultactionforkey:這個應該就是隱式動畫效果
上面也可以總結一點:uikit建立在core animation(預設對所有東西都做動畫)之上,所有core animation的動畫方法,再uikit層都有對應的。
比如:
1、uiview有兩個方法,+beginanimations:context:和+commitanimations,和catransaction的+begin和+commit方法類似。在上面講系統大概是如何實現隱式動畫,說到」沒有**物件,去找圖層動畫的action(以那種動畫展現)」,如果我不想用系統提供的動畫效果,有沒有其他的動畫效果可以執行。2、 uiview的block的動畫允許你在動畫結束的時候提供乙個完成的動作。catranscation介面提供的+setcompletionblock:方法也有同樣的功能。
@inte***ce
viewcontroller ()
@property (nonatomic, weak) iboutlet
uiview *layerview;
@property (nonatomic, weak) iboutlet calayer *colorlayer;
@end
@implementation
viewcontroller
- (void)viewdidload
; //add it to our view
[self
.layerview
.layer addsublayer:self
.colorlayer];
}@end
上面就做到了自定義action(動畫效果)。
注意:這裡要提醒大家:catransition和catransaction的區別。
這個就能看出catransition和catransaction真正的區別了吧。
只要記住後面單詞的區別:
action結尾的就是開始動畫、提交動畫(action行為的事情)
sition結尾的就是名詞,就是自定義動畫相關的屬性,
Core Animation動畫概述
core animation動畫概述 1 概述 在ios中,圖形可分為以下幾個層次 越上層,封裝程度越高,動畫實現越簡潔越簡單,但是自由度越低。本文著重介紹core animation層的動畫實現方案。2 動畫概念類 在ios中,展示動畫可以模擬於顯示生活中的 拍電影 拍電影有三大要素 演員 劇本 ...
IOS動畫Core Animation詳解
在ios中如果使用普通的動畫則可以使用uikit提供的動畫方式來實現,如果想實現更複雜的效果,則需要使用core animation了。下面詳解各種型別動畫的使用方式 plain view plain copy void animationofuikit plain view plain copy ...
IOS動畫Core Animation詳解
在ios中如果使用普通的動畫則可以使用uikit提供的動畫方式來實現,如果想實現更複雜的效果,則需要使用core animation了。下面詳解各種型別動畫的使用方式 plain view plain copy void animationofuikit plain view plain copy ...