UIPageViewController用法

本文详细介绍了如何在iOS应用中使用UIPageViewController实现视图控制器间的平滑切换,包括控制器的实例化、子控制器的设置、UIPageViewController的布局、默认控制器的设定以及必要的代理方法实现。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

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

    }

}

转载于:https://www.cnblogs.com/fantasy3588/p/5338475.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值