Я использую некоторый код, который был первоначально взят из примера Apple ViewTransitions, чтобы обменять два представления друг с другом.
CATransition *animation = [CATransition animation];
[animation setDelegate:self];
[animation setType:kCATransitionFade];
[animation setDuration:0.3f];
[animation setTimingFunction:[CAMediaTimingFunction functionWithName:kCAMediaTimingFunctionLinear]];
[[container layer] addAnimation:animation forKey:@"swap"];
Когда мой переход выполняется на устройстве, я иногда получаю вспышку одного кадра последнего кадра анимации перехода, а затем анимация воспроизводится плавно. Это дает очень резкий эффект 2-го вида, который мигает, а затем снова гаснет, прежде чем выполняется плавная анимация.
Основное различие между моим примером и примером Apple состоит в том, что мои представления не являются полноэкранными, у меня есть контейнер UIView, который содержит оба вложенных представления, и я применяю свою анимацию к слою контейнера вместо корневого слоя представления. Я не вижу, что это должно иметь большое значение, хотя.
Эта проблема не возникает вообще в симуляторе и периодически (около 60-70% времени) на устройстве. Кто-нибудь еще видит это поведение, и если да, то как вы обошли его?
Обновлено с дополнительной информацией:
Код изначально был частью многочастной анимации, но я переместил его, чтобы вызвать кнопку, чтобы изолировать проблему. Проблема возникает в обеих ситуациях.
Делегаты анимации были реализованы, но были удалены, чтобы попытаться изолировать проблему.
Представления не меняются во время анимации, и на самом деле вызывается [container setUserInteractionEnabled:NO]
(но проблема также происходит без отключения взаимодействия с пользователем).
Я попытался запустить анимацию с середины перехода и завершить ее до конца, используя setStartProgress
и setEndProgress
, снова проблема сохраняется.
Я также пытался уменьшить длительность анимации без эффекта.