如何检测UIPageViewController的视图何时发生了变化

时间:2018-03-06 01:09:16

标签: swift uiviewcontroller uipageviewcontroller

我有一个带有pageviewcontroller的应用程序,我想创建自己的自定义pageviewcontroller指示器,所有设置都是我现在唯一需要的是弄清楚如何判断视图控制器视图何时发生了变化以及查看了什么目前正在上线。

我已将以下演示链接起来。在第一部分中,我点击顶部的按钮来更改页面,滑块指示当前页面的工作情况。然而,之后我滑动手指更改控制器,我想让滑块指示器随页面移动

Demo

2 个答案:

答案 0 :(得分:0)

如果您有一个显示的页面数组,那么您可以使用UIPageViewControllerDelegate来检测页面更改。更具体地说,这个函数https://developer.apple.com/documentation/uikit/uipageviewcontrollerdelegate/1614091-pageviewcontroller会告诉你你将要转换到什么。然后,您可以根据即将显示的视图控制器确定您所在的页面。

答案 1 :(得分:0)

这里我评论了如何使用PageViewController

获取当前的Page索引
func pageViewController(_ pageViewController: UIPageViewController, didFinishAnimating finished: Bool, previousViewControllers: [UIViewController], transitionCompleted completed: Bool)
    {
        if (completed)
        {
            //No need as we had Already managed This action in other Delegate
        }
        else
        {
            ///Update Current Index
            Manager.pageindex = Manager.lastIndex

            ///Post notification to hide the draggable Menu
            NotificationCenter.default.post(name: NSNotification.Name(rawValue: "updateLabelValue"), object: nil)
        }
    }

    //MARK: Check Transition State
    func pageViewController(_ pageViewController: UIPageViewController, willTransitionTo pendingViewControllers: [UIViewController])
    {
        ///Update Last Index
        Manager.lastIndex = Manager.pageindex

        ///Update Index
        Manager.pageindex = pages.index(of: pendingViewControllers[0])!

        ///Post notification to hide the draggable Menu
        NotificationCenter.default.post(name: NSNotification.Name(rawValue: "updateLabelValue"), object: nil)
    }

我曾使用通知观察器通知主控制器有关页面更改和执行某些操作

经理是我的结构,保存当前页码,您可以在结构或类中保存索引

我的结构类

//Struct Class
struct Manager
{
    ///Current Page Index
    static var pageindex :Int = 0

    ///Last Index
    static var lastIndex :Int = 0
}

主要用途

switch Manager.pageindex
        {
        case 0:
            self.mainHomeLabel.text = "VC1"
        case 1:
            self.mainHomeLabel.text = "VC2"
        case 2:
            self.mainHomeLabel.text = "VC3"
        default:
            self.mainHomeLabel.text = "VC1"
        }

注意相应代码中的任何查询请询问

更新 - 添加了演示项目链接

链接 - https://github.com/RockinGarg/PageViewController-Demo.git