ios - Xcode UIPageViewController - 如何控制过渡期间的行为?

标签 ios xcode uipageviewcontroller

我一直在使用 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/

相关文章:

SwiftUI :Thread 1: EXC_BAD_INSTRUCTION (code=EXC_I386_INVOP, 子代码=0x0)

c - Matlab 生成的 C 代码无法正常工作

ios - UIPageViewController 第一次没有预加载

ios5 - 在 iOS 5 中为基于页面的应用程序加载背景图像的正确方法?

ios - 在 UIPageView 后面移动背景

c++ - 如何在 iOS 中添加带有 PCM 数据/缓冲区的可播放(例如 wav、wmv) header ?

ios - Swift 中的运算符优先级

c - xcode 构建错误 : "Conflicting types for ' uint6 4' " makes no sense to me

ios - TableViewCells 错误地加载基于 Firebase 数据的正确图像

ios - 标签高度错误