Мой уровень представления не соответствует слою моей модели, даже если у меня нет анимации
На айфоне у меня есть CALayer
что я оживляю с помощью Core Animation. Затем в какой-то момент я меняю вид контроллеров. Затем я возвращаюсь к контроллеру вида с CALayer
И в viewWillAppear:
Я установил свойства рамки и положения на своем слое, чтобы переместить его обратно в начальную точку.
Установка этих свойств изменяет уровень модели, но уровень представления все еще имеет старые значения, и его уровень представления не обновляется до следующей анимации, которую я играю.
В руководстве по программированию CA говорится:
"Вы можете запросить экземпляр CALayer для его соответствующего уровня представления во время транзакции анимации".
Что для меня означает, что уровень представления должен отличаться от уровня модели только во время анимации. Но в данный момент нет анимации. Я даже использовал kCATransactionDisableActions
чтобы убедиться, что при установке свойства position неявная анимация не запускается.
Кто-нибудь знает, почему мои слои презентации и модели не синхронизированы?
Благодарю.
2 ответа
Один из обходных путей, который я использовал, - это сброс положения моих слоев в viewWillDisappear. Также я заметил, что если я не анимирую свой слой сразу, то он действительно перемещается в положение, которое я установил в viewWillAppear.
Похоже, что Apple просто использует презентационный слой во время анимации и имеет ленивые обновления. Когда это не анимация, он должен использовать нормальный слой. Моя единственная ставка - это то, как им удается обрабатывать пользовательский интерфейс и избегать странных ошибок. Это может даже быть связано с тем, какие потоки используются.
Ваша проблема дает нам представление о капюшоне Apple, возможно, ответ заключается в том, что именно это выбирает яблоко, и это также отвечает на вопрос, который у меня был.