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