天天看點

iOS開發CoreAnimation解讀之五——進階動畫技巧

        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>

繼續閱讀