Мой уровень представления не соответствует слою моей модели, даже если у меня нет анимации

На айфоне у меня есть CALayer что я оживляю с помощью Core Animation. Затем в какой-то момент я меняю вид контроллеров. Затем я возвращаюсь к контроллеру вида с CALayer И в viewWillAppear: Я установил свойства рамки и положения на своем слое, чтобы переместить его обратно в начальную точку.

Установка этих свойств изменяет уровень модели, но уровень представления все еще имеет старые значения, и его уровень представления не обновляется до следующей анимации, которую я играю.

В руководстве по программированию CA говорится:

"Вы можете запросить экземпляр CALayer для его соответствующего уровня представления во время транзакции анимации".

Что для меня означает, что уровень представления должен отличаться от уровня модели только во время анимации. Но в данный момент нет анимации. Я даже использовал kCATransactionDisableActions чтобы убедиться, что при установке свойства position неявная анимация не запускается.

Кто-нибудь знает, почему мои слои презентации и модели не синхронизированы?

Благодарю.

2 ответа

Один из обходных путей, который я использовал, - это сброс положения моих слоев в viewWillDisappear. Также я заметил, что если я не анимирую свой слой сразу, то он действительно перемещается в положение, которое я установил в viewWillAppear.

Похоже, что Apple просто использует презентационный слой во время анимации и имеет ленивые обновления. Когда это не анимация, он должен использовать нормальный слой. Моя единственная ставка - это то, как им удается обрабатывать пользовательский интерфейс и избегать странных ошибок. Это может даже быть связано с тем, какие потоки используются.

Ваша проблема дает нам представление о капюшоне Apple, возможно, ответ заключается в том, что именно это выбирает яблоко, и это также отвечает на вопрос, который у меня был.

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