これを実装するのにめちゃくちゃ時間がかかった。
UIPageViewController
UIPageViewControllerDelegate
UIPageViewControllerDataSource
UIPageViewControllerについて
を読むと、下のように実装すればいいことがわかりました。
1 2 3 4 5 6 7 8 9 10 | 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]; |
1 2 3 4 5 6 7 | //UIPageViewControllerDelegate - (void)pageViewController:(UIPageViewController *)pageViewController didFinishAnimating:(BOOL)finished previousViewControllers:(NSArray *)previousViewControllers transitionCompleted:(BOOL)completed{ if(completed){ self.index = ((UIViewController *)[previousViewControllers objectAtIndex:0]).index; } } |
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 | //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 *)pageViewController:(UIPageViewController *)pageViewController viewControllerBeforeViewController:(UIViewController *)viewController{
と
- (UIViewController *)pageViewController:(UIPageViewController *)pageViewController viewControllerAfterViewController:(UIViewController *)viewController
が結構、デタラメに呼ばれたりするので、コンテンツ側に持たせているのである。
これに気づくまでにすんごい時間がかかった。
0 コメント:
コメントを投稿