如何检测页面视图控制器上的滑动?

时间:2017-06-20 19:34:24

标签: ios swift uipageviewcontroller swipe-gesture

即使没有任何视图控制器可以轻扫,如何在网页浏览控制器上检测到滑动?

1 个答案:

答案 0 :(得分:1)

Page View Controller内置了一个包含在scrollView中的手势识别器。这是一个平移手势识别器(见https://developer.apple.com/documentation/uikit/uiscrollview/1619425-pangesturerecognizer)。但是,页面视图控制器的滚动视图属性不公开(请参阅https://developer.apple.com/documentation/uikit/uipageviewcontroller)。您可以扩展Page View Controller类以更改此行为并公开滚动视图,以便在用户滚动浏览所有可用视图后获取继续发生的平移手势。

extension UIPageViewController {

    public var scrollView: UIScrollView? {
        for view in self.view.subviews {
            if let scrollView = view as? UIScrollView {
                return scrollView
            }
        }
        return nil
    }

}

接下来,您应该在视图中添加根视图控制器作为滚动视图的平移手势的目标,并执行加载方法,并在滚动视图的手势识别器检测到平移手势时包含您想要调用的方法。您还可以跟踪存储在根视图控制器上的属性的滑动次数。请注意,如果要跟踪最终视图控制器之外的滑动,则需要在根视图控制器上设置bool属性,该属性在用户滑动到页面视图控制器中的最终视图后设置为true并且仅启动在达到此阈值后跟踪滑动。

override func viewDidLoad() {
   . . .
   pvController.scrollView?.panGestureRecognizer.addTarget(self, action:#selector(self.handlePan(sender:)))
}

func handlePan(sender:UIPanGestureRecognizer) {
    switch sender.state {
    case .ended:
        self.numberOfSwipes = self.numberOfSwipes + 1
        print("User Swiped ")
        print(self.numberOfSwipes)
    default:
        break
    }
}

您可能希望在视图控制器上设置bool属性,在用户使用所有视图后触发该属性,以便您知道滑动是在视图之外发生的属性。我将应用的代码放在https://bitbucket.org/stonybrooklyn/pageviewcontroller/的公共回购中供您参考。