2014/07/12

[iOS][Objective-C]UIPageViewControllerを実装する

これを実装するのにめちゃくちゃ時間がかかった。
UIPageViewController
UIPageViewControllerDelegate
UIPageViewControllerDataSource
UIPageViewControllerについて
を読むと、下のように実装すればいいことがわかりました。

UIPageViewController *pageViewController = [[UIPageViewController alloc] initWithTransitionStyle:UIPageViewControllerTransitionStyleScroll navigationOrientation:UIPageViewControllerNavigationOrientationHorizontal options:nil];
pageViewController.delegate = self;
pageViewController.dataSource = self;

//表示したいコンテンツ
UIViewController *viewController;
[pageViewController setViewControllers:@[viewController] direction:UIPageViewControllerNavigationDirectionForward animated:NO completion:NULL];
[self addChildViewController:pageViewController];
[self.view addSubView:pageViewController.view];
[pageViewController didMoveToParentViewController:self];
//UIPageViewControllerDelegate
- (void)pageViewController:(UIPageViewController *)pageViewController didFinishAnimating:(BOOL)finished previousViewControllers:(NSArray *)previousViewControllers transitionCompleted:(BOOL)completed{
  if(completed){
    self.index = ((UIViewController *)[previousViewControllers objectAtIndex:0]).index;
  }

}
//UIPageViewControllerDataSource
- (UIViewController *)pageViewController:(UIPageViewController *)pageViewController viewControllerBeforeViewController:(UIViewController *)viewController{
  self.index = viewController.index;
  if(self.index == 0){
    return nil;
  }else{
    self.index = self.index -1;
    UIViewController *viewController;
    viewController.index = self.index;
    return viewController;
  }
}
- (UIViewController *)pageViewController:(UIPageViewController *)pageViewController viewControllerAfterViewController:(UIViewController *)viewController{
  self.index = viewController.index;
  if(self.index == [viewControllers count]){
    return nil;
  }else{
    self.index = self.index + 1;
    UIViewController *viewController;
    viewController.index = self.index;
    return viewController;
  }
}
これキーポイントは、表示させたいコンテンツ(UIVIewController)にindexというプロパティーを持たせているところ。
- (UIViewController *)pageViewController:(UIPageViewController *)pageViewController viewControllerBeforeViewController:(UIViewController *)viewController{

- (UIViewController *)pageViewController:(UIPageViewController *)pageViewController viewControllerAfterViewController:(UIViewController *)viewController
が結構、デタラメに呼ばれたりするので、コンテンツ側に持たせているのである。

これに気づくまでにすんごい時間がかかった。

0 コメント:

コメントを投稿