ScrollView – 手势识别器 – 垂直滑动

我有一个UIScrollView向左或向右滑动时工作,但是我缩小了scrollView的大小,所以现在显示区域不能完全占据superview的框架,并且只能在滚动视图的框架内滑动。

即使在缩小滚动视图的水平范围外上下滑动,我也希望能够垂直滚动。

build议我使用手势识别器,但这超出了我目前对iOS的熟悉程度,可以使用更具体的build议或更多的指导来开始。

有一个更简单的方法,然后使用手势识别器=]

您可以设置滚动视图的超级视图(这是较大的…)将触摸传递到滚动视图。 它正在工作MAGICALY =]

首先,select将所有触摸传递给滚动视图的视图。 如果你的父视图已经可以使用它。 否则你应该考虑添加一个新的视图的大小,你想要接触触摸。

现在创build一个新的类(我将用swift作为例子)

class TestView: UIView { @IBOutlet weak var Scroller: UIScrollView! override func hitTest(_ point: CGPoint, with event: UIEvent?) -> UIView? { let view = super.hitTest(point, with: event) if (view == self) { return Scroller } return view } } 

太好了! 现在你可以看到我们增加了一个滚轮的出口。 所以使用接口构build器,select新的视图,并将其类设置为身份检查器中的“ TestView ”(或者将其用于您的自定义类的名称)。

设置完课后,您的视图仍然处于选中状态,请转至连接检查器 ,并将“ Scroller ”连接到故事板上的滚动视图。 所有连接正确=]

而已!! 没有手势识别器需要! 新的视图会将所有触动的内容传递给滚动视图,它的行为就像你平移它=]

在我的回答中,我使用了这个答案

编辑:我现在改进了代码,它没有像以前预期的那样工作,现在它只捕获需要时,而不是像以前一样在应用程序中的每一个接触

  1. search一个名为SwipeGestureRecognizer的组件: 在这里输入图像说明

  2. 抓住它并将其放在视图顶部(使用层次结构确保将其放在它上面,如果将其放在另一个元素上,则此代码将不起作用):

    在这里输入图像说明

  3. 在层次结构中select一个SwipeGestureRecognizer并转到其属性页面。 更改向右滑动。

在这里输入图像说明

  1. 确保其他识别器的“滑动”属性为“左”

在这里输入图像说明

  1. selectUIScrollView并取消选中滚动启用

在这里输入图像说明

  1. detectSwipe() (见下面的源代码)连接到两个识别器。

 @IBAction func detectSwipe (_ sender: UISwipeGestureRecognizer) { if (currentPage < MAX_PAGE && sender.direction == UISwipeGestureRecognizerDirection.left) { moveScrollView(direction: 1) } if (currentPage > MIN_PAGE && sender.direction == UISwipeGestureRecognizerDirection.right) { moveScrollView(direction: -1) } } func moveScrollView(direction: Int) { currentPage = currentPage + direction let point: CGPoint = CGPoint(x: scrollView.frame.size.width * CGFloat(currentPage), y: 0.0) scrollView.setContentOffset(point, animated: true) // Create a animation to increase the actual icon on screen UIView.animate(withDuration: 0.4) { self.images[self.currentPage].transform = CGAffineTransform.init(scaleX: 1.4, y: 1.4) for x in 0 ..< self.images.count { if (x != self.currentPage) { self.images[x].transform = CGAffineTransform.identity } } } } 

有关更多信息,请参阅https://github.com/alxsnchez/scrollViewSwipeGestureRecognizer

我没有时间详细回答,但是:

在故事板中,在滚动视图的超级视图上拖动一个平移手势识别器…将它的动作与视图控制器相连接,在此操作中,通过使用您获取的手势识别器的属性来更改滚动视图的位置

提示:将操作更改参数types从Any到combobox中的UIPanGestureRecognizer

请不要看到这个答案作为build议在你的问题中使用这种方法,我不知道这是最好的方式,我只是帮你试一试