これを実装するのにめちゃくちゃ時間がかかった。
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 コメント:
コメントを投稿