Источник задержки неявной анимации UIView? - PullRequest
1 голос
/ 25 февраля 2010

У меня есть блок кода анимации UIView, который выглядит следующим образом:

[UIView beginAnimations:@"pushView" context:nil];
[UIView setAnimationDelay:0];
[UIView setAnimationDuration:.5];
[UIView setAnimationDelegate:self];
[UIView setAnimationWillStartSelector:@selector(animationWillStart)];

view.frame = CGRectMake(0, 0, 320, 416);
[UIView commitAnimations];

Код в основном имитирует анимацию презентации ModalView и привязан к кнопке на моем интерфейсе. Когда кнопка нажата, я получаю долгую (0,5 с) задержку (на iPod Touch ... в два раза быстрее на iPhone 3GS) перед тем, как на самом деле вызывается animationWillStart :. У моего приложения много чего происходит, кроме этого, но я рассчитал различные моменты своего кода, и задержка определенно происходит в этом блоке. Другими словами, отметка времени непосредственно перед этим блоком кода и отметка времени при вызове animationWillStart: показывает разницу в 0,5 секунды.

Я не слишком опытен с Core Animation, и я просто пытаюсь выяснить, в чем причина задержки ... Использование памяти стабильно, когда анимация запускается, и CoreAnimation FPS, кажется, подходит для Инструментов. Представление, которое становится анимированным, имеет более 20 общих подпредставлений, но если бы это было проблемой, не вызвало ли это прерывистость после запуска анимации, а не раньше? Есть идеи?

Ответы [ 2 ]

1 голос
/ 16 марта 2010

В своем вставленном блоке вы указываете селектор animationWillStart (без двоеточия), но позже в своем вопросе вы ссылаетесь на animationWillStart: (с двоеточием). Эти селекторы не эквивалентны, поэтому возможно ли, что ваш предполагаемый селектор никогда не вызывается из-за этой анимации, а вызывается через 0,5 секунды из-за некоторой другой анимации?

1 голос
/ 25 февраля 2010
  1. Попробуйте сделать это с одним подпредставлением или вообще без подпредставлений, чтобы убедиться, что задержка не вызвана таким количеством детей.
  2. Профилируйте код в инструментах, чтобы увидеть, где именно код отстает. Вы можете перейти к некоторому внутреннему вызову функции Core Animation, который подскажет вам, что происходит.
  3. Попробуйте код без «большого количества происходящего», чтобы убедиться, что вы не наступаете на пальцы Core Animation другим кодом.

Или, короче: экспериментируйте и измеряйте, потому что гипотезы редко работают при оптимизации.

...