UIPageViewController无法正常工作

时间:2014-11-08 23:15:44

标签: ios objective-c uipageviewcontroller

我开发了一个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;
}

1 个答案:

答案 0 :(得分:0)

好吧,我一夜之间就考虑过了,我认为你的问题来自于使用viewDidLoad方法开始播放电影。看起来当你使用滑动手势来切换页面时,比如从第2页到第3页,pageViewController不仅加载并显示第3页,它还会抢先加载第4页。大概这是性能优化,所以如果你滑动很快它又已经加载了下一页。但是,在您的情况下,这将触发索引4处的电影播放(您可以听到,但看不到,因为该页面尚未显示)。因为一次只能播放一部电影,所以第3页的电影就会停止播放。

因此,要修复它,我会更改您的代码,以便一旦页面实际出现在屏幕上,电影才会开始播放。如果您将[self.player play]移至viewDidAppear:方法,我认为它会正常工作。很高兴通过聊天会话回答任何问题。