Как я могу обнаружить завершение анимации, вызванной CATransaction - PullRequest
5 голосов
/ 29 января 2012

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

  [CATransaction begin];
  [CATransaction setAnimationDuration:2];
  [logoLayer setOpacity:0];
  [CATransaction commit];

Как я могу сказать, когдаэта анимация сделана?executeSelector: задерживается на 2 секунды.подход не кажется «правильным».

1 Ответ

22 голосов
/ 29 января 2012

Согласно документ , [CATransaction setCompletionBlock:] может быть использовано для того, что вы хотите.

Там написано

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

Попробуйте добавить что-то подобное перед begin транзакцией анимации.

[CATransaction setCompletionBlock:^{
    // Action after the animation completion
}];
...