检测 page/completion 动画到 UIPageViewController 中另一个页面的变化
Detect change in page/completion of animation to another page in UIPageViewController
我有以下功能,每当用户从一页滑动到另一页(垂直分页)时我想调用它:
func sendNotification (){
NotificationCenter.default.post(name: NSNotification.Name(rawValue: "stopVideo"), object: nil)
print("called")
}
目前,可以说,每当创建 pageAfter 或 -before 时都会调用该函数。用于 "create" next/previous 页面的函数如下所示(在本例中为 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 在某种程度上准备了以下页面并且返回到上一页也不会调用该函数(因为视图控制器不需要 "created")我没有得到我的结果想。我想知道是否有一个函数可以在动画完成时调用 sendNotification()
。我发现了很多关于跳转到另一页的问题,但是 none 关于我的问题。非常感谢您的帮助!
也许运行 UIPageViewControllerDelegate
方法文档中的通知方法对您有好处 documentation :
optional func pageViewController(_ pageViewController: UIPageViewController,
didFinishAnimating finished: Bool,
previousViewControllers: [UIViewController],
transitionCompleted completed: Bool)
您可以使用 UIPageViewControllerDelegate
函数
func pageViewController(_ pageViewController: UIPageViewController, willTransitionTo pendingViewControllers: [UIViewController])
func pageViewController(_ pageViewController: UIPageViewController, didFinishAnimating finished: Bool, previousViewControllers: [UIViewController], transitionCompleted completed: Bool)
正如这些函数的名称所示,当用户滑动到您主页的另一页时,将调用第一个函数ViewController。
第二个将在 Transition 完成时调用,这意味着用户看到动画后的下一页。
在这两种情况下,您都可以检查页面之间的变化。
另外不要忘记检查第二个函数的 completed
变量。如果用户开始滑动然后没有转到下一页(因为他在它之前松开手指或类似的)这是错误的并且你没有新的 ViewController.
数组 previousViewControllers
包含最近显示的控制器,其中 previousViewControllers[0]
可能是之前显示的控制器。
有关更多信息,请查找 documentation
我有以下功能,每当用户从一页滑动到另一页(垂直分页)时我想调用它:
func sendNotification (){
NotificationCenter.default.post(name: NSNotification.Name(rawValue: "stopVideo"), object: nil)
print("called")
}
目前,可以说,每当创建 pageAfter 或 -before 时都会调用该函数。用于 "create" next/previous 页面的函数如下所示(在本例中为 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 在某种程度上准备了以下页面并且返回到上一页也不会调用该函数(因为视图控制器不需要 "created")我没有得到我的结果想。我想知道是否有一个函数可以在动画完成时调用 sendNotification()
。我发现了很多关于跳转到另一页的问题,但是 none 关于我的问题。非常感谢您的帮助!
也许运行 UIPageViewControllerDelegate
方法文档中的通知方法对您有好处 documentation :
optional func pageViewController(_ pageViewController: UIPageViewController,
didFinishAnimating finished: Bool,
previousViewControllers: [UIViewController],
transitionCompleted completed: Bool)
您可以使用 UIPageViewControllerDelegate
函数
func pageViewController(_ pageViewController: UIPageViewController, willTransitionTo pendingViewControllers: [UIViewController])
func pageViewController(_ pageViewController: UIPageViewController, didFinishAnimating finished: Bool, previousViewControllers: [UIViewController], transitionCompleted completed: Bool)
正如这些函数的名称所示,当用户滑动到您主页的另一页时,将调用第一个函数ViewController。
第二个将在 Transition 完成时调用,这意味着用户看到动画后的下一页。
在这两种情况下,您都可以检查页面之间的变化。
另外不要忘记检查第二个函数的 completed
变量。如果用户开始滑动然后没有转到下一页(因为他在它之前松开手指或类似的)这是错误的并且你没有新的 ViewController.
数组 previousViewControllers
包含最近显示的控制器,其中 previousViewControllers[0]
可能是之前显示的控制器。
有关更多信息,请查找 documentation