[英]Recognize swipe gesture in UIView to scroll the scrollView using gesture-recognizer
我有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
}
}
}
这是我的视图控制器,蓝色背景是滚动视图。 滑动手势仅适用于该蓝色区域。 但是我希望它即使在角落也能在屏幕上显示。 如何使用手势识别器实现它 ?
编辑
我实际上刚刚学习了一个更简单的解决方案:只需将view.addGestureRecognizer(scrollView.panGestureRecognizer)
添加到viewDidAppear
或viewDidLoad
。
这本质上确实是采取scrollView
的UIPanGestureRecognizer ,手势识别器识别手指拖动并滚动scrollView
的内容,并将其提供给基视图,以便它可以识别手指拖动并滚动scrollView
过的内容。
因此,您不需要如下所述的所有math和scrollRectToVisible
。 哦,对了,我认为学习UIScrollViews的工作原理很有用又有趣!
旧
要以编程方式使UIScrollView“滚动”,请使用UIScrollView的scrollRectToVisible
。
有关更多详细信息和代码语法,请参见以编程方式滚动UIScrollView 。
基本上,在任何时间点,UIScrollView的内容子视图都会从其框架中偏移一些量。
它有助于理解UIScrollView的各个部分(尤其是内容子视图),如下图所示(可以随意忽略紫色的UIImageView):
在第一个图像中,UIScrollView的内容子视图(红色轮廓)根本没有偏离UIScrollView的框架(假定与可见屏幕的大小相同):两者在(0,0)处的左上角都相同。
在第二个/中间图像中,UIScrollView的内容子视图现在偏移了“上”:该内容子视图的左上角现在位于类似(0,-200)的位置,其中(0,0)仍然是该对象的左上角UIScrollView的框架。
再次,您可以更改UIScrollView的内容子视图偏移量,并使用scrollRectToVisible
以及参数animated: true
来模拟“滚动”。
提示 :例如, scrollView.contentOffset.x
内容向左滚动(在用户从右向左滑动之后),您将采用UIScrollView的当前内容偏移量的x坐标( scrollView.contentOffset.x
),然后减去 UIScrollView的宽度( scrollView.frame.size.width
)。 因此,如果UIScrollView的当前内容偏移量(左上角)为(0,0),则内容偏移量(左上角)将从(0-width,0)开始移动,内容“向左”移动。
将滚动视图移到视图的框架,然后设置内容的插入/偏移,这样它只会一直显示到蓝色框架
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.