UIPageViewController用法

1.实例化控制器

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

    self.pageViewController.dataSource = self;

    self.pageViewController.delegate = self;

2.设置子控制器

 // 勋章

    CLHonorCardViewController *cardVC = [[CLHonorCardViewController alloc] init];

    // 荣誉

    CLHonorViewController *honorVC = [[CLHonorViewController alloc] init];

    // 特权

    CLHonorPrivilegeViewController *privilegeVC = [[CLHonorPrivilegeViewController alloc] init];

    // 每日成绩

    CLHonorCoreViewController *coreVC = [[CLHonorCoreViewController alloc] init];

    

    self.subViewController = @[cardVC,honorVC,privilegeVC,coreVC];

    [self addChildViewController:self.pageViewController];

    [self.view addSubview:self.pageViewController.view];

 // 3.设置UIPageViewController的frame

 self.pageViewController.view.frame = CGRectMake(0, CGRectGetMaxY(self.selectTab.frame), LYRHomePageScreenW, LYRHomePageScreenH - CGRectGetMaxY(self.selectTab.frame));

    [self.pageViewController didMoveToParentViewController:self];

// 4.设置默认的控制器

 [self.pageViewController setViewControllers:@[cardVC] direction:UIPageViewControllerNavigationDirectionForward animated:NO completion:NULL];

    self.view.gestureRecognizers = self.pageViewController.gestureRecognizers;

5.实现UIPageViewController的代理方法

#pragma mark - UIPageViewControllerDataSource

- (UIViewController *)pageViewController:(UIPageViewController *)pageViewController

      viewControllerBeforeViewController:(UIViewController *)viewController {

    

    NSUInteger index = [self.subViewController indexOfObject:viewController];

    if (index == 0) {  // 注意点如果子控制器为0,则返回空

        return nil;

    }

    return self.subViewController[index - 1];  // 此处index必须减一

}

- (UIViewController *)pageViewController:(UIPageViewController *)pageViewController

       viewControllerAfterViewController:(UIViewController *)viewController {

    NSUInteger index = [self.subViewController indexOfObject:viewController];

    if (index >= self.subViewController.count - 1) {

        return nil;

    }

    return self.subViewController[index + 1];

}

#pragma mark UIPageViewControllDelegate

- (void)pageViewController:(UIPageViewController *)pageViewController willTransitionToViewControllers:(NSArray<UIViewController *> *)pendingViewControllers

{

    UIViewController* controller = [pendingViewControllers firstObject];

    self.nextIndex = [self.subViewController indexOfObject:controller];

}

- (void)pageViewController:(UIPageViewController *)pageViewController didFinishAnimating:(BOOL)finished previousViewControllers:(NSArray<UIViewController *> *)previousViewControllers transitionCompleted:(BOOL)completed

{

    if (completed) {

        

        [self.selectTab selectButtonAtIndex:self.nextIndex];

    }

}

1
原文地址:https://www.cnblogs.com/fantasy3588/p/5338475.html