1

我一直在 Xcode 中使用UIPageController模板来创建交互式书籍。

在这个应用程序中,每个页面在页面加载后都会播放不同的音频文件。

当我点击页面的一个角时效果很好(第一页的音频停止,第二页的音频开始,没有明显的重叠)。

当我滑动手指并拖动页面时会出现问题。就像在 iBooks 上一样,我可以将页面保持在过渡的中间,同时查看两个页面,但这会导致两个页面的音频重叠。

最理想的情况是,我希望第一页的音频在过渡开始后立即停止,而第二页的音频在过渡结束后立即开始(页面卷曲到达屏幕末尾),但是其中任何一个仅这些就可以给我一个很好的结果。

问题是我找不到添加 [audioFromPage stop] 或 [audioFromPage play] 的地方,因此没有重叠。

我尝试将这些行添加到setViewControllers:direction:animated:completion:方法以及viewControllerAfterViewControllerviewControllerBeforeViewController方法中,但它们都没有工作。

你们对如何解决这个问题有任何想法吗?

4

2 回答 2

6

我在我的一个应用程序中遇到过类似的情况。

要仅在成功翻页(任一方向)后启动音频,可以将一个可选方法添加到您的 UIPageViewControllerDelegate 类中:

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

每当调用此方法时,您都可以向当前发送[pageViewController.viewControllers objectAtIndex:0]一条消息以开始播放它的声音(在我看来,您一次只呈现一个页面,因此 NSArrayviewControllers将始终只有一个元素)

同样,您也可以向 a 消息发送类似[previousViewcontrollers objectAtIndex:0]的消息以停止播放其声音。

这将在翻页完成时将声音从一页切换到下一页,而不是按照您的要求从开头切换,但是没有类似的方法pageViewcontroller didBeginAnimating:

最安全的方法是定义一个包含您的 audioFromPage 停止和启动方法的协议,然后让每个 viewController(您的书的“页面”)实现此协议。这样,编译器将防止您意外创建未实现这些方法的页面,并避免运行时崩溃。

于 2011-11-22T20:30:19.633 回答
1

开始和结束页面转换有两种方法:

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

-(void)pageViewController:(UIPageViewController *)pageViewController didFinishAnimating:(BOOL)完成 previousViewControllers:(NSArray *)previousViewControllers transitionCompleted:(BOOL)完成

于 2012-11-06T09:17:27.940 回答