美文网首页
UIPageViewController

UIPageViewController

作者: 纳兰沫 | 来源:发表于2019-11-20 13:55 被阅读0次

    如果UIPageViewController 的效果是翻页效果 那么下面的点是不会出现的

    import UIKit
    
    class PageViewController: UIPageViewController {
    
        private lazy var vc1 = storyboard!.instantiateViewController(withIdentifier: "VC1")
        private lazy var vc2 = storyboard!.instantiateViewController(withIdentifier: "VC2")
        private lazy var vc3 = storyboard!.instantiateViewController(withIdentifier: "VC3")
        private var pages: [UIViewController] = []
    
        override func viewDidLoad() {
            super.viewDidLoad()
    
            dataSource = self
            
            pages = [vc1,vc2,vc3]
            //设置首页
            setViewControllers([vc1], direction: .forward, animated: true, completion: nil)
        }
        
    }
    
    extension PageViewController: UIPageViewControllerDataSource {
        func pageViewController(_ pageViewController: UIPageViewController, viewControllerBefore viewController: UIViewController) -> UIViewController? {
            let currentIndex = pages.firstIndex(of: viewController)!
            return currentIndex ==  0 ? pages[pages.count - 1] : pages[currentIndex - 1]
        }
        
        func pageViewController(_ pageViewController: UIPageViewController, viewControllerAfter viewController: UIViewController) -> UIViewController? {
            let currentIndex = pages.firstIndex(of: viewController)!
            return currentIndex == pages.count - 1 ? pages[0] : pages[currentIndex + 1]
        }
        
        //显示下面的点
        func presentationCount(for pageViewController: UIPageViewController) -> Int {
            return pages.count
        }
        
        func presentationIndex(for pageViewController: UIPageViewController) -> Int {
            return 0
        }
    }
    
    不使用PageController的点 使用PageControl
    class PageViewController: UIPageViewController {
    
        private lazy var vc1 = storyboard!.instantiateViewController(withIdentifier: "VC1")
        private lazy var vc2 = storyboard!.instantiateViewController(withIdentifier: "VC2")
        private lazy var vc3 = storyboard!.instantiateViewController(withIdentifier: "VC3")
        private var pages: [UIViewController] = []
        var pageControl: UIPageControl!
        var pendingIndex = 1
    
        override func viewDidLoad() {
            super.viewDidLoad()
    
            dataSource = self
            delegate = self
            pages = [vc1,vc2,vc3]
            //设置首页
            setViewControllers([vc1], direction: .forward, animated: true, completion: nil)
            
            pageControl = UIPageControl(frame: CGRect(x: 0, y: UIScreen.main.bounds.maxY - 100, width: UIScreen.main.bounds.width, height: 50))
            pageControl.numberOfPages = pages.count
    //        pageControl.currentPage = 0
            view.addSubview(pageControl)
        }
        
    }
    
    extension PageViewController: UIPageViewControllerDataSource {
        func pageViewController(_ pageViewController: UIPageViewController, viewControllerBefore viewController: UIViewController) -> UIViewController? {
            let currentIndex = pages.firstIndex(of: viewController)!
            return currentIndex ==  0 ? pages[pages.count - 1] : pages[currentIndex - 1]
        }
        
        func pageViewController(_ pageViewController: UIPageViewController, viewControllerAfter viewController: UIViewController) -> UIViewController? {
            let currentIndex = pages.firstIndex(of: viewController)!
            return currentIndex == pages.count - 1 ? pages[0] : pages[currentIndex + 1]
        }
    }
    
    extension PageViewController: UIPageViewControllerDelegate {
        
        func pageViewController(_ pageViewController: UIPageViewController, didFinishAnimating finished: Bool, previousViewControllers: [UIViewController], transitionCompleted completed: Bool) {
            
            if completed {
                pageControl.currentPage = pendingIndex
            }
        }
        
        func pageViewController(_ pageViewController: UIPageViewController, willTransitionTo pendingViewControllers: [UIViewController]) {
            pendingIndex = pages.firstIndex(of: pendingViewControllers[0])!
        }
    }
    

    相关文章

      网友评论

          本文标题:UIPageViewController

          本文链接:https://www.haomeiwen.com/subject/uoloictx.html