我一直在使用Xcode中的 UIPageController 模板来创建一本互动书。
在此应用中,页面加载后,每个页面都会播放不同的音频文件。
当我点击页面的一个角时,效果很好(第一页的音频停止,第二页的音频开始,没有明显的重叠)。
当我滑动手指并拖动页面时,会出现问题。就像在iBooks上一样,我可以将页面放在过渡的中间,同时看到两个页面,但这会导致两个页面的音频重叠。
理想情况下,我希望转换开始后第一页的音频就停止,转换结束时(页面卷曲到达屏幕的尽头),第二页的音频就开始。仅这些都会给我一个很好的结果。
问题是我找不到添加[audioFromPage stop]或[audioFromPage play]的地方,所以没有重叠。
我试图将这些行添加到setViewControllers:direction:animated:completion:
方法以及 viewControllerAfterViewController 和 viewControllerBeforeViewController 方法中,但是它们均无效。
你们对如何解决这个问题有任何想法吗?
最佳答案
我的一个应用程序中也遇到过类似情况。
要仅在成功翻页(任一方向)后才启动音频,可以将可选方法添加到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 stop和start方法的协议,然后使每个viewController(书的“页面”)实现此协议。这样,编译器将防止您意外创建未实现这些方法的页面,并避免了运行时崩溃。