一:實現如下
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! }