coreanimation中還有一個非常重要的類:catransaction事物類,這個可以同時設定多個layer層的動畫效果。可以通過隐式和顯式兩種方式來進行動畫操作。
對layer層的屬性操作,都會形成隐式動畫,要使用隐式動畫,需要關閉layer層的animation動畫屬性,使用下面的方法:
<a href="http://my.oschina.net/u/2340880/blog/539827#">?</a>
1
2
3
<code>//關閉animation動畫效果,開啟隐式動畫</code>
<code>+ (</code><code>bool</code><code>)disableactions;</code>
<code>+ (</code><code>void</code><code>)setdisableactions:(</code><code>bool</code><code>)flag;</code>
catransaction用類方式通過設定key-value來進行動畫的屬性設定:
<code>+ (nullable id)valueforkey:(nsstring *)key;</code>
<code>+ (</code><code>void</code><code>)setvalue:(nullable id)anobject forkey:(nsstring *)key;</code>
支援的key值如下:
4
5
6
7
8
<code>//設定動畫持續時間</code>
<code> </code><code>nsstring * </code><code>const</code> <code>kcatransactionanimationduration;</code>
<code> </code><code>//設定停用animation類動畫</code>
<code> </code><code>nsstring * </code><code>const</code> <code>kcatransactiondisableactions;</code>
<code> </code><code>//設定動畫時序效果</code>
<code> </code><code>nsstring * </code><code>const</code> <code>kcatransactionanimationtimingfunction;</code>
<code> </code><code>//設定動畫完成後的回調</code>
<code> </code><code>nsstring * </code><code>const</code> <code>kcatransactioncompletionblock;</code>
除了隐式的展示動畫外,也可以顯式的通過調用catransaction的相關方法進行顯示的送出動畫:
9
<code>//動畫開始</code>
<code>+ (</code><code>void</code><code>)begin;</code>
<code>//送出動畫</code>
<code>+ (</code><code>void</code><code>)commit;</code>
<code>//立即進行動畫渲染 一般不需調用</code>
<code>+ (</code><code>void</code><code>)flush;</code>
<code>//下面這兩個方法用于動畫事物的加鎖與解鎖 在多線程動畫中,保證修改屬性的安全</code>
<code>+ (</code><code>void</code><code>)lock;</code>
<code>+ (</code><code>void</code><code>)unlock;</code>
示例如下:
<code> </code><code>[catransaction begin];</code>
<code> </code><code>[catransaction setvalue:@1 forkey:kcatransactionanimationduration];</code>
<code> </code><code>layer.backgroundcolor = [uicolor bluecolor].cgcolor;</code>
<code> </code><code>[catransaction commit];</code>