在UIPageViewController中检测页面/动画完成到另一页面的更改

时间:2017-06-16 09:43:57

标签: ios swift uipageviewcontroller

每当用户从一个页面滑动到另一个页面时,我都会调用以下函数(垂直分页):

func sendNotification (){

    NotificationCenter.default.post(name: NSNotification.Name(rawValue: "stopVideo"), object: nil)
    print("called")

}

目前,每当创建pageAfter或-before时都会调用该函数。用于"创建"的功能下一页/上一页看起来像这样(在这种情况下它是viewControllerAfter):

func pageViewController(_ pageViewController: UIPageViewController, viewControllerAfter viewController: UIViewController) -> UIViewController? {

    let currentIndexString  = (viewController as! MyViewController).index
    let currentIndex        = indec.index(of: currentIndexString!)

    //set if so that next page
    if currentIndex! < indec.count - 1 {

        let myViewController = MyViewController()

        myViewController.index            = indec[currentIndex! + 1]

        sendNotification() //function is called 

        return myViewController

    }

    return nil

}

由于UIPageViewController稍微准备了以下页面并返回上一页也没有调用该函数(因为视图控制器不需要&#34;创建&#34;)我没有得到我想要的结果。我想知道是否有一个函数可以在完成动画时调用sendNotification()。我发现很多关于跳转到另一页的问题,但没有关于我的问题。我非常感谢你的帮助!

2 个答案:

答案 0 :(得分:4)

您可以使用UIPageViewControllerDelegate功能

func pageViewController(_ pageViewController: UIPageViewController, willTransitionTo pendingViewControllers: [UIViewController])
func pageViewController(_ pageViewController: UIPageViewController, didFinishAnimating finished: Bool, previousViewControllers: [UIViewController], transitionCompleted completed: Bool)

正如这些函数的名称所示,当用户滑动到PageViewController的另一个页面时,将调用第一个函数。

当转换完成时,将调用第二个,这意味着用户在动画之后看到下一页。

两者都可以检查页面之间的变化。

另外不要忘记检查第二个功能的completed变量。如果用户开始滑动然后没有进入下一页(因为他在它或类似之前释放了手指),那么它是假的,你没有新的ViewController。

数组previousViewControllers包含最近显示的控制器,其中previousViewControllers[0]可能是之前显示的控制器。

有关详细信息,请查看documentation

答案 1 :(得分:1)

function transportProfile() { $type = 2; $business = Business::where('type', $type)->get(); $location = Business::find(3)->locations; echo $location; return view('userProfile', compact('business', 'location')); } 方法文档documentation中运行通知方法可能会对您有所帮助:

UIPageViewControllerDelegate