Как я могу запустить Core Animation точно после появления представления? - PullRequest
0 голосов
/ 03 февраля 2012

Я пытаюсь анимировать слой в определенные моменты во время цикла просмотра.Скажем, например, анимация представляет собой простое постепенное появление (CABasicAnimation применяется к ключу непрозрачности).Но я не могу понять, как сделать так, чтобы моя анимация на CALayer запускалась только тогда, когда я уверен, что содержащее представление (и слой) видимы.

2 примера:

  1. Затухание слоя ТОЛЬКО после того, как представление контейнера (и суперслой этого слоя) уже видны пользователю, в ответ на то, что контроллер суперпредставления помещен в стек контроллеров навигации.То есть ТОЛЬКО после настройки анимации и viewController-> view, запускаемой с помощью [navigationController pushViewController: x animated: YES];завершен, и представление viewController уже видно.

  2. Исчезновение слоя ТОЛЬКО после того, как пользователь прокрутил, через просмотр с прокруткой, до некоторой страницы.То есть пользователь прокручивает до страницы n (и каждая страница является подпредставлением представления прокрутки) и только после того, как новая страница прокручена до центра представления содержимого, запускается анимация.

Это похоже на запуск анимации после переворачивания страницы "книги", чтобы рассказать историю на каждой странице.

Имеет смысл?

1 Ответ

1 голос
/ 10 февраля 2012

Я выяснил оба случая:

Для первого случая код анимации должен быть в viewDidAppear: и ключ заключается в том, чтобы заключить анимацию в транзакцию CAT.По какой-то причине без явной транзакции анимация, похоже, не занимает.

Второй пример очень похож, только то, что можно добавить CATransaction в делегате scrollview метод DidEndDecelerating:

- (void)scrollViewDidEndDecelerating:(UIScrollView *)scrollView
{
  int pageNumber = floor(self.scrollView.contentOffset.x / self.scrollView.frame.size.width);
  if(pageNumber == n)
  {
    [CATransaction begin];
    ...
...