UIScrollView 检测点击

Posted

技术标签:

【中文标题】UIScrollView 检测点击【英文标题】:UIScrollView detect tap 【发布时间】:2012-03-04 19:26:12 【问题描述】:

我有一个 UIScrollView,我需要在其中滚动。同时,我需要检测滚动视图上的点击。我怎样才能做到这一点?

我已经尝试将 TapGestureRecognizer 添加到视图中,但没有任何运气。还尝试了几种使用 UIScrollViewDelegate 方法的方法。

在 UIScrollView 中有 MPMoviePlayerController 视图。

我使用以下代码添加了reconigzer

UITapGestureRecognizer *singleTap = [[[UITapGestureRecognizer alloc] initWithTarget:self action:@selector(handleTap:)] autorelease];
singleTap.enabled = YES;
singleTap.cancelsTouchesInView = NO;

[scrollView addGestureRecognizer:singleTap];

谢谢。

【问题讨论】:

【参考方案1】:

尝试在滚动视图中放置一个视图并将手势识别器和另一个视图添加到其中。

【讨论】:

您的回答不是正确的解决方案,但是,它使我找到了答案。当我在滚动视图中添加 mp-view 时,我必须禁用 mpmovieplayercontroller 上的用户交互,以便滚动视图处理手势。 然后让你的解决方案成为答案并接受它作为正确答案。【参考方案2】:

您可以在 UIScrollView 中捕捉任何类型的手势。确保您还处理了一些默认属性,例如将 cancelsTouchesInView 属性设置为 false,默认情况下为 true。还要为您的子视图提供一些标签号,以在选择器中进行区分。 & 还使他们的用户交互成为真实的。

例如。我在我的滚动视图中添加了一个图像视图,我也在启用它的用户交互,我也在更新它的内容大小,

   
           //adding images to the scroll view   
             for i in 0 ..< 4 
          let image = UIImage(named: "img\(i).png")
          let imageView  = UIImageView(image: image)
          imageView.center = CGPoint(x: CGFloat(i) * 60 + 60/2, y: 60/2)
          imageView.tag = i
          imageView.isUserInteractionEnabled = true
          addSubview(imageView)

          let tap = UITapGestureRecognizer(target: self, action: #selector(didTapImage(_:)))
          imageView.addGestureRecognizer(tap)
        

        contentSize = CGSize(width: 10 * 60, height:  60 + 2*10)  

【讨论】:

【参考方案3】:

解决方案:将 MPMoviePlayerController 的视图添加到 UIScrollView 时,需要禁用 MpMoviePlayerController 视图上的用户交互,以便 UIScrollView 能够捕捉手势识别器。此解决方案仅在您不希望使用 mpmovieplayercontrollers 默认菜单等进行交互时才有效。

【讨论】:

以上是关于UIScrollView 检测点击的主要内容,如果未能解决你的问题,请参考以下文章

调整容器 uiscrollview 中所有 uiscrollview 的大小

UIScrollView 检测点击

检测对 UIScrollView 内的 UIImageView 的点击

何时使用 UITouch 与 UIScroll

UIScroll 及其嵌套元素

检测 UIScrollView 之外的点击