CoreAnimation дергается - PullRequest
       3

CoreAnimation дергается

0 голосов
/ 05 марта 2012

Я создал UIView и несколько слоев. Я организовал эти слои в иерархию superview-subview с корнем в слое UIView, добавил некоторые распознаватели жестов, и я пытаюсь управлять геометрией слоев на событиях из распознавателей жестов (точно устанавливая границы и положение). Я использую неявную анимацию и CATransaction. Явные анимации не используются.

Фактический результат достаточно хорош, если я создаю CATransaction с длительностью = 0. Но если я установлю длительность на 0.2, я получу некоторые странные результаты: поскольку событие происходит не быстро, и предыдущая транзакция успевает завершиться, прежде чем следующая запустит все все в порядке (например, при нажатии), но если не хватает времени (например, при сжатии или панорамировании), изменяемый слой начинает дергаться. Визуально это выглядит так, как будто анимация возвращается к начальной точке и начинается снова с новым значением.

Я не вижу причин для этого. Я попытался выполнить макет в -[UIView layoutSubviews] и вызвать setNeedsDisplay в обработчиках распознавания жестов. Я также пытался разделить эту логику на отдельный метод, но это не помогает.

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

Есть какие-нибудь подсказки?

1 Ответ

1 голос
/ 05 марта 2012

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

[yourView.layer removeAnimationForKey:@"yourAnimationKey"];

и вам нужно реализовать метод делегата анимации

-(void)stopAnimation:(id)sender
{
    yourView.frame = [[yourView.layer presentationLayer] frame]; // that set frame of your view to it's animation position
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...