UIPageViewController能够让用户在不同的页面内容之间导航,而每个页面的内容也有自己的ViewController. 页面切换有翻页和滚动两种方式.
class ViewController: UIViewController,UIPageViewControllerDataSource,UIPageViewControllerDelegate {
var pageController:UIPageViewController!
var currentPage:Int = 0
var viewControllers = NSMutableArray()
override func viewDidLoad() {
super.viewDidLoad()
//初始化
//transitionStyle:转换样式,有PageCurl和Scroll两种
//navigationOrientation:导航方向,有Horizontal和Vertical两种
//options: UIPageViewControllerOptionSpineLocationKey---书脊的位置
// UIPageViewControllerOptionInterPageSpacingKey---每页的间距
pageController = UIPageViewController(transitionStyle: .PageCurl, navigationOrientation:.Horizontal, options: [UIPageViewControllerOptionSpineLocationKey:NSNumber(float: 10)])
pageController.delegate = self;//设置delegate,提供展示相关的信息和接收手势发起的转换的通知
pageController.dataSource = self;//设置datasource,提供展示的内容
currentPage = 0
//初始化要展示的Controller,自定义
for index in 0...9 {
let storyboard = UIStoryboard(name: "Main", bundle: nil)
let pViewController = storyboard.instantiateViewControllerWithIdentifier("PageViewController") as PageViewController
viewControllers.addObject(pViewController)
pViewController.numberLabel?.text = "第\(currentPage+1)页"
}
//展示之前进行初始化第一个Controller, 单个显示放一个,两个显示则放两个,和样式有关
pageController.setViewControllers([viewControllers.objectAtIndex(0)], direction: .Forward, animated: false) { (b:Bool) -> Void in
}
//UIPageController必须放在Controller Container中
self.addChildViewController(pageController)
self.view.addSubview(pageController.view)
currentPage = 0
}
//------------Delegate--------------
func pageViewController(pageViewController: UIPageViewController, willTransitionToViewControllers pendingViewControllers: [AnyObject]) {
}
func pageViewController(pageViewController: UIPageViewController, didFinishAnimating finished: Bool, previousViewControllers: [AnyObject], transitionCompleted completed: Bool) {
}
func pageViewController(pageViewController: UIPageViewController, spineLocationForInterfaceOrientation orientation: UIInterfaceOrientation) -> UIPageViewControllerSpineLocation {
return .Min
}
func pageViewControllerSupportedInterfaceOrientations(pageViewController: UIPageViewController) -> Int {
return 2
}
func pageViewControllerPreferredInterfaceOrientationForPresentation(pageViewController: UIPageViewController) -> UIInterfaceOrientation {
return .Portrait
}
//-------------DataSource-----------------
func pageViewController(pageViewController: UIPageViewController, viewControllerBeforeViewController viewController: UIViewController) -> UIViewController? {
currentPage--
if currentPage < 0 {
currentPage = 0
return nil
}
return viewControllers[currentPage] as? UIViewController
}
func pageViewController(pageViewController: UIPageViewController, viewControllerAfterViewController viewController: UIViewController) -> UIViewController? {
currentPage++
if currentPage > 9 {
currentPage = 9
return nil
}
return viewControllers[currentPage] as? UIViewController
}
func presentationCountForPageViewController(pageViewController: UIPageViewController) -> Int {
return pageController.viewControllers.count
}
func presentationIndexForPageViewController(pageViewController: UIPageViewController) -> Int {
return currentPage
}
}