2016-09-05 49 views
-1

以下代碼將在commit之後立即更新backgroundColor嵌套CATransaction的行爲?

[CATransaction begin]; 
self.view.backgroundColor = [UIColor redColor]; 
[CATransaction commit]; 

sleep(5); 

,但只有在最外面的事務提交嵌套明確CATransactions,屏幕更新。

[CATransaction begin]; 
[CATransaction begin]; 
self.view.backgroundColor = [UIColor redColor]; 
[CATransaction commit]; 
sleep(5); 
[CATransaction commit]; 

所以這使得它很奇怪,因爲我們知道runloop會在每個循環中創建一個最外層的隱式事務。爲什麼implicit transactionexplicit transaction提交時不被視爲最外層交易?

回答

0

總是存在隱式事務。也可以有一個明確的交易。直到所有代碼運行完畢,隱式事務纔會提交。如果您有明確的交易(begincommit),則在遇到commit時提交。

嵌套的目的顯式交易只允許您爲動畫的不同部分提供不同的參數(例如持續時間)實際承諾不會發生,直到最外層commit。閱讀the docs

你犯的最外層的事務的變化只有在沒有核心動畫開始相關的動畫

+0

所以,當需要大約嵌套事務,我們總是指向明確的交易? – Karl

+0

是的,你的第二個例子是關於嵌套顯式事務,一個'begin ... commit'對彼此相對。顯式事務不是以任何有趣的方式嵌套在隱式事務中,因爲它是承諾的,因此與隱式事務稍後會做什麼無關。 – matt