CATransition показывает один кадр от конца перехода до начала анимации - PullRequest
3 голосов
/ 04 ноября 2008

Я использую некоторый код, который был первоначально взят из примера 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, снова проблема сохраняется.

Я также пытался уменьшить длительность анимации без эффекта.

Ответы [ 2 ]

0 голосов
/ 06 ноября 2008

Решено, я пропустил ключевую часть этого, которая я считаю неуместной;) После настройки анимации в приведенном выше примере кода я поменял местами представления тем же методом.

Перемещение в делегат animationDidStart устранило проблему.

0 голосов
/ 04 ноября 2008

Чтобы начать отвечать на ваш вопрос, нужна дополнительная информация - например, как вы называете этот код (например, связан ли он с кнопкой как действием или как-то автоматически запускается), реализовали ли вы методы делегата для запуска? и остановить анимацию (и что в ней содержится), и изменяются ли ваши представления в какой-то момент во время анимации? Время между симулятором и устройством будет отключено - вам не следует полагаться на симулятор для проверки анимации, поскольку все будет происходить быстрее.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...