Вести вложенную CATransaction?
Код ниже обновит backgroundColor
сразу после commit
,
[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 transaction
не рассматривается как самая внешняя транзакция, когда explicit transaction
совершить?
1 ответ
Всегда есть неявная транзакция. Также может быть явная транзакция. Неявная транзакция не фиксируется, пока весь ваш код не завершится. Если у вас есть явная транзакция (begin
а также commit
), то когда commit
встречается.
Целью вложенных явных транзакций является только предоставление различных параметров (например, длительности) для разных частей анимации; фактический коммит не происходит до самого крайнего commit
, Прочитайте документы:
Только после того, как вы подтвердите изменения для самой внешней транзакции, Core Animation начнет ассоциировать анимации