一、了解一下
@1、UIPageViewController 可以輕松在其他管理的各View間滑動(dòng)切換
不僅局限于創(chuàng)建引導(dǎo)頁(yè)

Page.png
@2、 與導(dǎo)航控制器相似,翻頁(yè)控制器 是一個(gè)容器控制器
| 作用 |
|---|
| 管理視圖 |
| 控制切換 |
@3、容器中的每一頁(yè)其實(shí)都是自治的,由每一頁(yè)的控制器管理
二、如何使用

HOW.png
@1、此處舉例,引導(dǎo)頁(yè)字頁(yè)面都是復(fù)用,所以使用動(dòng)態(tài),每次切換下一頁(yè)時(shí),都會(huì)咨詢數(shù)據(jù)源,所以需要遵守如下協(xié)議,實(shí)現(xiàn)如下方法:
UIPageViewControllerDataSource
//MARK: - UIPageViewControllerDataSource
func pageViewController(_ pageViewController: UIPageViewController, viewControllerBefore viewController: UIViewController) -> UIViewController? {
var index = (viewController as! ContentViewController).index
index -= 1
return vc(atIndex: index)
}
func pageViewController(_ pageViewController: UIPageViewController, viewControllerAfter viewController: UIViewController) -> UIViewController? {
var index = (viewController as! ContentViewController).index
index += 1
return vc(atIndex: index)
}
func vc(atIndex: Int) -> ContentViewController? {
//判斷index是否在合理的區(qū)間內(nèi),用Swift的if case語(yǔ)句
if case 0..<headings.count = atIndex {
if let contentVC = storyboard?.instantiateViewController(withIdentifier: "ContentViewController") as? ContentViewController{
contentVC.heading = headings[atIndex]
contentVC.footer = footers[atIndex]
contentVC.imageName = images[atIndex]
contentVC.index = atIndex
return contentVC
}
}
return nil
}
@如何調(diào)用
override func viewDidLoad() {
super.viewDidLoad()
dataSource = self
if let startVC = vc(atIndex: 0) {
setViewControllers([startVC], direction: .forward, animated: true, completion: nil)
}
}
三、添加頁(yè)碼

頁(yè)碼.png
// MARK: - 添加頁(yè)碼
func presentationCount(for pageViewController: UIPageViewController) -> Int {
return headings.count
}
func presentationIndex(for pageViewController: UIPageViewController) -> Int {
return 0
}