zoukankan      html  css  js  c++  java
  • swift:简单使用翻页控制器UIPageViewController

    一、小叙

    UIPageViewController是一个实现图书阅读的控制器,使用它可以设置书脊位置、单双页、过渡效果等,它是通过代理的方式来实现翻页,也即上一页、下一页。最终这个UIPageViewController被包装后添加到当前控制器即可。

    二、直接上代码

    //
    //  ViewController.swift
    //  PageViewControllerDemo
    //
    //  Created by 夏远全 on 2017/1/19.
    //  Copyright © 2017年 夏远全. All rights reserved.
    //
    
    import UIKit
    
    class ViewController: UIViewController,UIPageViewControllerDelegate,UIPageViewControllerDataSource {
        
        //定义UIPageViewController和内容数组
        var pageController:UIPageViewController!
        var pageContent:[String] = [String]()
        
        override func viewDidLoad() {
            super.viewDidLoad()
            
            //初始化UIPageViewController
            //transitionStyle: 翻页效果(卷起来翻卷、水平活动翻卷)
            //navigationOrientation:翻页方向(水平方向、竖直方向)
            //options: 这是一个字典,设置翻页控制器的书脊位置(none/min/mid/max)
            pageController = UIPageViewController.init(transitionStyle: .pageCurl, navigationOrientation: .horizontal, options: [UIPageViewControllerOptionSpineLocationKey:NSNumber(value:UIPageViewControllerSpineLocation.min.rawValue)])
            pageController.view.frame = self.view.bounds
            
            //设置代理,提供展示相关的信息和接收手势发起的转换的通知
            pageController.delegate = self
            
            //设置数据源,提供展示的内容
            pageController.dataSource = self
            
            //创建显示内容
            self.createContentPages()
            
            //初始化内容控制器
            let initalViewController = self.viewControllerAtIndex(index: 0)
            pageController.setViewControllers([initalViewController!], direction: .forward, animated: false) { (b:Bool) in
                
                //UIPageController必须放在Controller Container中
                self.addChildViewController(self.pageController)
                self.view.addSubview(self.pageController.view)
                self.pageController.didMove(toParentViewController: self)
            }
        }
        
        //自定义方法,创建显示视图
        func viewControllerAtIndex(index:Int) -> ContentViewController? {
            if self.pageContent.count == 0 || index > self.pageContent.count {
                return nil
            }
            let dataViewController = ContentViewController()
            dataViewController.dataObject = self.pageContent[index]
            dataViewController.loadHTMLContent()
            return dataViewController
        }
        
        //自定义方法,获取viewController的页码
        func indexOfViewController(viewControler:ContentViewController) -> Int {
            return self.pageContent.index(of: viewControler.dataObject!)!
        }
        
        //自定义方法,创建显示内容
        func createContentPages() -> Void {
            
            for i in 1..<11 {
                let contentString = "<html><head></head><body><h1>《侠客行》</h1><p>第(i)页</p></body></html>"
                pageContent.append(contentString)
            }
        }
        
        //实现UIPageViewControllerDeleagte代理方法
        //将要翻页
        func pageViewController(_ pageViewController: UIPageViewController, willTransitionTo pendingViewControllers: [UIViewController]) {
            print("started")
        }
        //翻页结束
        func pageViewController(_ pageViewController: UIPageViewController, didFinishAnimating finished: Bool, previousViewControllers: [UIViewController], transitionCompleted completed: Bool) {
            print("finished")
        }
        //设置书脊位置
        func pageViewController(_ pageViewController: UIPageViewController, spineLocationFor orientation: UIInterfaceOrientation) -> UIPageViewControllerSpineLocation {
            return .min
        }
        //设置设备支持方向
        func pageViewControllerSupportedInterfaceOrientations(_ pageViewController: UIPageViewController) -> UIInterfaceOrientationMask {
            return .all
        }
        //设置优选方向
        func pageViewControllerPreferredInterfaceOrientationForPresentation(_ pageViewController: UIPageViewController) -> UIInterfaceOrientation {
            return .portrait
        }
        
        //实现UIPageViewControllerDataSource数据源方法
        //返回总页数
        func presentationCount(for pageViewController: UIPageViewController) -> Int {
            return self.pageContent.count
        }
        //向前翻页
        func pageViewController(_ pageViewController: UIPageViewController, viewControllerBefore viewController: UIViewController) -> UIViewController? {
            
            //获取当前viewController的页码
            var index:Int = self.indexOfViewController(viewControler: viewController as! ContentViewController)
            
            //如果是第0页,返回nil
            if index == 0 || (index == NSNotFound) {
                return nil
            }
            
            index -= 1
            
            return self.viewControllerAtIndex(index: index)
        }
        //向后翻页
        func pageViewController(_ pageViewController: UIPageViewController, viewControllerAfter viewController: UIViewController) -> UIViewController? {
           
            //获取当前viewController的页码
            var index:Int = self.indexOfViewController(viewControler: viewController as! ContentViewController)
            
            if index == NSNotFound {
                return nil
            }
            
            index += 1
            
            //如果是最后一张,返回nil
            if index == self.pageContent.count {
                return nil
            }
            
            return self.viewControllerAtIndex(index: index)
        }
    }

    三、效果(点击屏幕实现翻页)

     

  • 相关阅读:
    排序-计数-优化版
    排序-计数-基础版
    排序-归并
    Unity战斗模块之角色继承设计---1.1
    Unity中保存和读取数据的类---PlayerPrefs
    《计算机图形学》 第一章 基础知识--02向量(二维)
    《计算机图形学》 第一章 基础知识--01下载和安装DirectX,配置VS编辑器
    第四章 002-条件语句
    第四章 001-复合语句
    第三章 004-运算符
  • 原文地址:https://www.cnblogs.com/XYQ-208910/p/6406532.html
Copyright © 2011-2022 走看看