CoreAnimation编程指南(八)事务
生活随笔
收集整理的這篇文章主要介紹了
CoreAnimation编程指南(八)事务
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
圖層的每個改變都是事務的一部分。CATransaction是核心動畫類,它負責成批的把多個圖層樹的修改作為一個原子更新到渲染樹。 本章介紹了核心動畫支持的兩種事務。隱式事務和顯式事務。 ? 1.1 隱式事務
? 當圖層樹被沒有獲得事務的線程修改的時候將會自動創建隱式事務,當線程的運行循環(run-loop)執行下次迭代的時候將會自動提交事務。
? 代碼1的示例修改圖層的opacity,zPosition和position數字,依賴隱式事務來確保動畫同時一起發生。 ? 代碼 1 ?隱式事務動畫 ? theLayer.opacity=0.0; ? theLayer.zPosition=-200; ? thelayer.position=CGPointMake(0.0,0.0); ? ? 重要:當在一個沒有運行循環(runloop)的線程修改圖層的屬性的時候,你必須使用顯式的事務。 ? 1.2 顯式事務
? 在你修改圖層樹之前,可以通過給CATransaction類發送一個begin消息來創建一個顯式事務,修改完成之后發送comit消息。顯式事務在同時設置多個圖層的屬性的時候(例如當布局多個圖層的時候),臨時禁用圖層的行為,或者臨時修改動畫的時間的時候非常有用。
1.2.1 臨時禁用圖層的action
? 你可以在修改圖層屬性值的時候通過設置事務的kCATransactionDisableActions值為YES來暫時禁用圖層的行為。在事務范圍所作的任何更改也不會因此而發生的動畫。代碼2顯示了一個示例,當把aLayer從可視化圖層樹移除的時候禁用淡出動畫。
? 代碼 2 ?臨時禁用 layer的action ? [CATransaction begin]; ? [CATransaction setValue:(id)kCFBooleanTrue forKey:kCATransactionDisableActions]; ? [aLayer removeFromSuperlayer]; ? [CATransaction commit]; ? 1.2.2 重載隱式動畫的時間
? 你可以暫時改變響應改變圖層屬性的動畫的時間,通過設置事務的kCATransactionAnimationDuration鍵的值為新的時間。事務范圍內所產生的任何動畫都會使用該新設置的時間值而不是他們原有的值。代碼3顯示了一個示例,把動畫的發生時間改為10秒而不是zPosition和opacity所指定的動畫的默認時間。
? 代碼 3 ?重寫動畫持續時間 ? [CATransaction begin]; ? [CATransaction setValue:[NSNumber numberWithFloat:10.0f] forKey:kCATransactionAnimationDuration]; ? theLayer.zPosition=200.0; ? theLayer.opacity=0.0; ? [CATransaction commit]; ? ? 即使上面的示例中顯示了begin和commit所包圍的顯式事務的時間,你也可以忽略這些而采用隱式事務來替代。 ? 1.2.3 事務的嵌套
? 顯式事務可以被嵌套,允許你禁用部分動畫的行為或者在屬性被修改的時候產生的動畫使用不同的時間。僅當最外層的事務被提交的時候,動畫才會發生。 ?? ? 代碼4 中顯示了一個嵌套兩個事務的例子。最外層的事務設置隱式動畫的時間為2秒,并設置圖層的position屬性值。內層的事務設置隱式動畫的時間為5秒,并修改圖層的opacity和zPosition屬性值。 ?? ? 代碼4 嵌套的顯式事務 ? [CATransaction begin]; // outer transaction ?? ? // change the animation duration to 2 seconds ? [CATransaction setValue:[NSNumber numberWithFloat:2.0f] forKey:kCATransactionAnimationDuration]; ?? ? // move the layer to a new position ? theLayer.position = CGPointMake(0.0,0.0); ? [CATransaction begin]; // inner transaction ?? ? // change the animation duration to 5 seconds ? [CATransaction setValue:[NSNumber numberWithFloat:5.0f] forKey:kCATransactionAnimationDuration]; ? ? // change the zPosition and opacity ? theLayer.zPosition=200.0; ? theLayer.opacity=0.0; ? ? [CATransaction commit]; // inner transaction ? ? [CATransaction commit]; // outer transaction
轉自夢維:http://www.dreamingwish.com/dream-2012/coreanimation-programming-guide-vii-matters.html
? 當圖層樹被沒有獲得事務的線程修改的時候將會自動創建隱式事務,當線程的運行循環(run-loop)執行下次迭代的時候將會自動提交事務。
? 代碼1的示例修改圖層的opacity,zPosition和position數字,依賴隱式事務來確保動畫同時一起發生。 ? 代碼 1 ?隱式事務動畫 ? theLayer.opacity=0.0; ? theLayer.zPosition=-200; ? thelayer.position=CGPointMake(0.0,0.0); ? ? 重要:當在一個沒有運行循環(runloop)的線程修改圖層的屬性的時候,你必須使用顯式的事務。 ? 1.2 顯式事務
? 在你修改圖層樹之前,可以通過給CATransaction類發送一個begin消息來創建一個顯式事務,修改完成之后發送comit消息。顯式事務在同時設置多個圖層的屬性的時候(例如當布局多個圖層的時候),臨時禁用圖層的行為,或者臨時修改動畫的時間的時候非常有用。
1.2.1 臨時禁用圖層的action
? 你可以在修改圖層屬性值的時候通過設置事務的kCATransactionDisableActions值為YES來暫時禁用圖層的行為。在事務范圍所作的任何更改也不會因此而發生的動畫。代碼2顯示了一個示例,當把aLayer從可視化圖層樹移除的時候禁用淡出動畫。
? 代碼 2 ?臨時禁用 layer的action ? [CATransaction begin]; ? [CATransaction setValue:(id)kCFBooleanTrue forKey:kCATransactionDisableActions]; ? [aLayer removeFromSuperlayer]; ? [CATransaction commit]; ? 1.2.2 重載隱式動畫的時間
? 你可以暫時改變響應改變圖層屬性的動畫的時間,通過設置事務的kCATransactionAnimationDuration鍵的值為新的時間。事務范圍內所產生的任何動畫都會使用該新設置的時間值而不是他們原有的值。代碼3顯示了一個示例,把動畫的發生時間改為10秒而不是zPosition和opacity所指定的動畫的默認時間。
? 代碼 3 ?重寫動畫持續時間 ? [CATransaction begin]; ? [CATransaction setValue:[NSNumber numberWithFloat:10.0f] forKey:kCATransactionAnimationDuration]; ? theLayer.zPosition=200.0; ? theLayer.opacity=0.0; ? [CATransaction commit]; ? ? 即使上面的示例中顯示了begin和commit所包圍的顯式事務的時間,你也可以忽略這些而采用隱式事務來替代。 ? 1.2.3 事務的嵌套
? 顯式事務可以被嵌套,允許你禁用部分動畫的行為或者在屬性被修改的時候產生的動畫使用不同的時間。僅當最外層的事務被提交的時候,動畫才會發生。 ?? ? 代碼4 中顯示了一個嵌套兩個事務的例子。最外層的事務設置隱式動畫的時間為2秒,并設置圖層的position屬性值。內層的事務設置隱式動畫的時間為5秒,并修改圖層的opacity和zPosition屬性值。 ?? ? 代碼4 嵌套的顯式事務 ? [CATransaction begin]; // outer transaction ?? ? // change the animation duration to 2 seconds ? [CATransaction setValue:[NSNumber numberWithFloat:2.0f] forKey:kCATransactionAnimationDuration]; ?? ? // move the layer to a new position ? theLayer.position = CGPointMake(0.0,0.0); ? [CATransaction begin]; // inner transaction ?? ? // change the animation duration to 5 seconds ? [CATransaction setValue:[NSNumber numberWithFloat:5.0f] forKey:kCATransactionAnimationDuration]; ? ? // change the zPosition and opacity ? theLayer.zPosition=200.0; ? theLayer.opacity=0.0; ? ? [CATransaction commit]; // inner transaction ? ? [CATransaction commit]; // outer transaction
轉自夢維:http://www.dreamingwish.com/dream-2012/coreanimation-programming-guide-vii-matters.html
總結
以上是生活随笔為你收集整理的CoreAnimation编程指南(八)事务的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: JS--Console.log()详解
- 下一篇: try-with-resource语法