我开发了一个iOS应用程序,并且我使用UIPageViewController为应用程序演示了一个Demo Tour,在每个视图控制器上我显示了一个图像和一个视频,但方法
pageViewController:ViewControllerBeforeViewController
pageViewController:ViewControllerAfterViewController
无法正常工作,有时会跳转到另一个不是下一个或前一个页面的页面。只有当我点击页面指示器(UIPageControl)它才能正常工作时,我才会使用滑动手势来传递页面。
我的代码:
- (UIViewController *)pageViewController:(UIPageViewController *)pageViewController viewControllerBeforeViewController:(UIViewController *)viewController
{
NSUInteger index = ((DemoTourViewController*) viewController).pageIndex;
if (index == NSNotFound)
return nil;
// If the current page is the first one then go back to the last one
if (index == 0)
index = [self.pageTitles count];
index--;
return [self viewControllerAtIndex:index];
}
- (UIViewController *)pageViewController:(UIPageViewController *)pageViewController viewControllerAfterViewController:(UIViewController *)viewController
{
NSUInteger index = ((DemoTourViewController*) viewController).pageIndex;
if (index == NSNotFound)
return nil;
index++;
// If the current page is the last one then just start again (go in circle)
if (index == [self.pageTitles count])
index = 0;
return [self viewControllerAtIndex:index];
}
我在我的日志上打印了索引值,它代表我的解释,即索引是2,刷卡后是4(应该是3),但在设备中显示第三页的第三个图像,但可以&# 39;播放第三个视频,仅重现第四个视频的声音。当我点击页面控制指示器时,不会发生这种情况。
我的PageViewcontroller
中还有其他方法- (DemoTourViewController *)viewControllerAtIndex:(NSUInteger)index
{
if (([self.pageTitles count] == 0) || (index >= [self.pageTitles count])) {
return nil;
}
// Create a new view controller and pass suitable data.
DemoTourViewController *pageContentVC = [self.storyboard instantiateViewControllerWithIdentifier:@"DemoTourViewController"];
pageContentVC.imageFile = self.pageImages[index];
pageContentVC.titleText = self.pageTitles[index];
pageContentVC.pageIndex = index;
pageContentVC.videoPath = [[NSBundle mainBundle]pathForResource:self.pageVideos[index] ofType:@"mp4"];
pageContentVC.backgroundImgView.userInteractionEnabled = YES;
return pageContentVC;
}
- (NSInteger)presentationCountForPageViewController:(UIPageViewController *)pageViewController
{
return [self.pageTitles count];
}
- (NSInteger)presentationIndexForPageViewController:(UIPageViewController *)pageViewController
{
return 0;
}
答案 0 :(得分:0)
好吧,我一夜之间就考虑过了,我认为你的问题来自于使用viewDidLoad
方法开始播放电影。看起来当你使用滑动手势来切换页面时,比如从第2页到第3页,pageViewController不仅加载并显示第3页,它还会抢先加载第4页。大概这是性能优化,所以如果你滑动很快它又已经加载了下一页。但是,在您的情况下,这将触发索引4处的电影播放(您可以听到,但看不到,因为该页面尚未显示)。因为一次只能播放一部电影,所以第3页的电影就会停止播放。
因此,要修复它,我会更改您的代码,以便一旦页面实际出现在屏幕上,电影才会开始播放。如果您将[self.player play]
移至viewDidAppear:
方法,我认为它会正常工作。很高兴通过聊天会话回答任何问题。