Вести вложенную 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 начнет ассоциировать анимации

Другие вопросы по тегам