UIPageViewController的使用(Swift)

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
    }

}


猜你喜欢

转载自blog.csdn.net/lcl130/article/details/42119659