识别UIView中的滑动手势,使用手势识别器

时间:2017-02-17 07:24:59

标签: ios swift uiscrollview swipe-gesture

我有UIScrollView,滚动视图框架不等于UIView框架。因此,在滚动视图框外滑动时不会刷新滚动视图内容。但我希望整个屏幕响应滚动视图虽然滚动视图不覆盖全屏幕。 我知道可以通过使滚动视图框架等于视图框架来完成。但我不想这样做。到目前为止,我尝试了其他可能的解决方案。但没有什么能按我的意愿行事。 我需要使用手势识别器来完成此操作。

以下是我的代码:

override func viewDidLoad() {
        super.viewDidLoad()
        scrollView.delegate = self

        let swipeRight = UISwipeGestureRecognizer(target: self, action: #selector(self.respondToSwipeGesture))
        swipeRight.direction = UISwipeGestureRecognizerDirection.right
        self.view.addGestureRecognizer(swipeRight)


        let swipeLeft = UISwipeGestureRecognizer(target: self, action: #selector(self.respondToSwipeGesture))
        swipeLeft.direction = UISwipeGestureRecognizerDirection.left
        self.view.addGestureRecognizer(swipeLeft)

}

func respondToSwipeGesture(gesture: UIGestureRecognizer) {
        if let swipeGesture = gesture as? UISwipeGestureRecognizer {
            switch swipeGesture.direction {
            case UISwipeGestureRecognizerDirection.right:

                scrollView.panGestureRecognizer.isEnabled = true

            case UISwipeGestureRecognizerDirection.left:

                 scrollView.panGestureRecognizer.isEnabled = true


            default:
                break
            }
        }
    }

这是我的视图控制器,蓝色背景是滚动视图。滑动手势仅适用于该蓝色区域。但我希望它甚至可以在角落里通过屏幕工作。 如何使用手势识别器实现

2 个答案:

答案 0 :(得分:4)

修改

我实际上刚刚了解了一个更简单的解决方案:只需将view.addGestureRecognizer(scrollView.panGestureRecognizer)添加到viewDidAppearviewDidLoad即可。

这基本上是做scrollView的{​​{3}},一个识别手指拖动并滚动scrollView内容的手势识别器,并将其提供给基本视图它可以识别手指拖动并滚动scrollView的内容。

所以你不需要所有的数学和scrollRectToVisible,如下所述。哦,我认为了解UIScrollViews如何工作更有用,也很有趣!

<强> OLD

要以编程方式使UIScrollView“滚动”,请使用UIScrollView的scrollRectToVisible

有关详细信息和代码语法,请参阅 UIPanGestureRecognizer

基本上,在任何时间点,UIScrollView的内容子视图都会从其框架中偏移一些数量。

它有助于理解UIScrollView的部分(尤其是内容子视图),就像在这张图片中一样(随意忽略紫色UIImageView):Programmatically scroll a UIScrollView

在第一张图片中,UIScrollView的内容子视图(红色轮廓)没有偏离UIScrollView的框架(假设与可见屏幕大小相同):两者在(0,0)处都有相同的左上角)。

在第二个/中间图像中,UIScrollView的内容子视图现在偏移“向上”:内容子视图的左上角现在是(0,-200),其中(0,0)仍然是左上角UIScrollView框架的一角。

同样,您可以更改UIScrollView的内容子视图偏移,从而使用scrollRectToVisible和参数animated: true模拟“滚动”。

提示:要让内容向左滚动(例如,在用户从右向左滑动之后),您将获取UIScrollView的当前内容偏移量的x坐标(scrollView.contentOffset.x)并且将UIScrollView(scrollView.frame.size.width)的宽度减去。因此,如果UIScrollView的当前内容偏移量(左上角)为(0,0),则内容偏移量(左上角)从(0-width,0)移动,内容“向左移动”。

答案 1 :(得分:0)

将滚动视图设置为视图的框架,但随后设置内容插入/偏移,以便它只会到蓝框