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

 附上效果圖:


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM