Xcode UIPageViewController - как контролировать поведение при переходе? - PullRequest
1 голос
/ 22 ноября 2011

Я использовал шаблон UIPageController в XCode для создания интерактивной книги.

В этом приложении каждая страница воспроизводит отдельный аудиофайл, как только страница загружается.

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

Проблема возникает, когдаЯ провожу пальцем, перетаскивая страницу.Как и в iBooks, я могу удерживать страницу в середине перехода, просматривая обе страницы, но это приводит к перекрытию звука на обеих страницах.

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

Дело в том, что я не могу найти место, где можно добавить [audioFromPage stop] или [audioFromPage play], чтобы не было перекрытия.

Я пытался добавить эти строки в setViewControllers:direction:animated:completion:метод, а также методы viewControllerAfterViewController и viewControllerBeforeViewController , но ни один из них не сработал.

Делаете ли выребята есть идеи как решить эту проблему?

Ответы [ 2 ]

6 голосов
/ 23 ноября 2011

У меня была похожая ситуация в одном из моих приложений.

Для запуска аудио только после успешного поворота страницы (в любом направлении) есть дополнительный метод, который может быть добавлен к любому классу UIPageViewControllerDelegate:

- (void)pageViewController:(UIPageViewController *)pageViewController didFinishAnimating:(BOOL)finished previousViewControllers:(NSArray *)previousViewControllers transitionCompleted:(BOOL)completed;

Каждый раз, когда вызывается этот метод, вы можете отправить текущее [pageViewController.viewControllers objectAtIndex:0] сообщение, чтобы начать воспроизведение его звука (мне очень кажется, что вы представляете одну страницу за раз, поэтому NSArray viewControllers всегда будет есть один элемент)

Аналогичным образом, вы также можете отправить подобное сообщение на [previousViewcontrollers objectAtIndex:0] сообщение, чтобы прекратить воспроизведение его звука.

Это переключит звук с одной страницы на следующую при завершении переворачивания страницы, а не в начале, как вы просили, но аналогичного метода для pageViewcontroller didBeginAnimating:

не существует.

самый безопасный способ сделать это - определить протокол, включающий ваши методы остановки и запуска audioFromPage, а затем заставить каждый viewController («страницы» вашей книги) реализовать этот протокол. Таким образом, компилятор предотвратит случайное создание страницы, которая не реализует этот метод, и позволит избежать сбоя во время выполнения.

1 голос
/ 06 ноября 2012

Существует два способа перехода между начальной и конечной страницами:

- (void) pageViewController: (UIPageViewController *) pageViewController willTransitionToViewControllers: (NSArray *) pendingViewControllers

- (void) pageViewController: (UIPageViewController *) PageViewController

...