我一直在使用 UIPageController Xcode 中的模板来创建交互式书籍。
在这个应用程序中,每个页面在页面加载后都会播放不同的音频文件。
当我点击页面的一个角落时效果很好(第一页的音频停止,第二页的音频开始,没有明显的重叠)。
当我滑动手指并拖动页面时会出现问题。就像在 iBooks 上一样,我可以将页面保持在过渡的中间,同时查看两个页面,但这会导致两个页面的音频重叠。
最理想的情况是,我希望第一页的音频在过渡开始后立即停止,而第二页的音频在过渡结束后立即开始(页面 curl 到达屏幕末尾),但是其中任何一个仅这些就可以给我一个很好的结果。
问题是我找不到添加 [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 停止和启动方法的协议(protocol),然后让每个 viewController(您的书的“页面”)实现此协议(protocol)。这样,编译器将防止您意外创建未实现这些方法的页面,并避免运行时崩溃。
关于ios - Xcode UIPageViewController - 如何控制过渡期间的行为?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8231040/