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];
}
}