Swift UIPageViewController 引导页基本用法

 一:实现如下

import UIKit

class ViewController: UIViewController,UIPageViewControllerDataSource {
    //所有的ViewController,分别设置背景色为红 绿 蓝
    private lazy var allViewControllers:[UIViewController] = {
       return [FirstViewController(),SecondViewController(),ThirdViewController()]
    }()
    
    override func viewDidLoad() {
        super.viewDidLoad()
        
        //transitionStyle:转换样式,有PageCurl和Scroll两种
        
        //navigationOrientation:导航方向,有Horizontal和Vertical两种
        
        //options: UIPageViewControllerOptionSpineLocationKey---书脊的位置
        
        //         UIPageViewControllerOptionInterPageSpacingKey---每页的间距
        let pageViewController = UIPageViewController(transitionStyle: .scroll, navigationOrientation: .horizontal, options: nil)
        
        pageViewController.dataSource = self
        addChildViewController(pageViewController)
        self.view.addSubview(pageViewController.view)
      
        //设置初始引导页
        pageViewController.setViewControllers([allViewControllers.first!], direction: .forward, animated: true, completion: nil)
    }
    
    //返回页面个数
    func presentationCount(for pageViewController: UIPageViewController) -> Int {
        return allViewControllers.count
    }
    //获取前一个页面
    func pageViewController(_ pageViewController: UIPageViewController, viewControllerBefore viewController: UIViewController) -> UIViewController? {
        //获取当前页面的索引
        guard let index = allViewControllers.index(of: viewController) else{return nil}
        //前一个页面
        let preIndex = index - 1
        //如果在第一页向右滑动则滚动到最后一页
        if preIndex < 0{
            return allViewControllers.last
        }
        //判断当前索引是否大于0且少于总索引个数
        guard  preIndex>=0 , allViewControllers.count>preIndex else{return nil}
        return allViewControllers[preIndex]
    }
    //获取后一个页面
    func pageViewController(_ pageViewController: UIPageViewController, viewControllerAfter viewController: UIViewController) -> UIViewController? {
        //获取当前页面的索引
        guard let index = allViewControllers.index(of: viewController) else{return nil}
        //前一个页面
        let nextIndex = index + 1
        //如果在最后页向左滑动则滚动到第一页
        if nextIndex == allViewControllers.count{
            return allViewControllers.first
        }
        //判断当前索引是否大于0且少于总索引个数
        if allViewControllers.count>nextIndex{
            return allViewControllers[nextIndex]
        }else{
            return nil
        }
    }
}

二:效果显示

 

三:扩展,添加UIPageControl 

在上面代码的基础上添加如下代码:

1.//添加UIPageControl控件
        var pageControl:UIPageControl!
        let rect = CGRect(x: UIScreen.main.bounds.width/2-50, y: UIScreen.main.bounds.height*2/3, width: 100, height: 30)
        pageControl = UIPageControl(frame: rect)
        pageControl.numberOfPages = allViewControllers.count
        pageControl.pageIndicatorTintColor = UIColor.black

        //将pageControl添加到pageViewController.view,或者添加到    ViewController.view上,不过得把pageController.view至于pageControl的底层
        pageViewController.view.addSubview(pageControl)


2.//设置代理 class ViewController: UIViewController,UIPageViewControllerDataSource,UIPageViewControllerDelegate{}
pageViewController.
delegate = self

3.//遵守UIPageViewControllerDelegate,实现如下 //获取将要被转换的ViewController func pageViewController(_ pageViewController: UIPageViewController, willTransitionTo pendingViewControllers: [UIViewController]) { //获取当前要被转换的VC,设置pageControl的当前页 let index = allViewControllers.index(of: pendingViewControllers.first!) pageControl.currentPage = index! }

 附上效果图:

转载于:https://www.cnblogs.com/chenxiaopao/p/7712904.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值