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! }

 附上效果图:

posted @ 2017-10-23 01:22  小炮陈  阅读(2515)  评论(0编辑  收藏  举报