繁体   English   中英

如何在UIScrollview中检测UIImageView上的触摸?

[英]How to detect touch on UIImageView inside UIScrollview?

我在我的应用程序中有一个UIScrollview,我用大量的UIImageViews填充它大约900.它们都很小,一次又一次只包含两个不同的图像。

现在我在检测其中一个UIImageViews上的触摸时遇到了很多麻烦。

我已经为他们分配了一个独特的标签,以便能够区分它们,但我真的很难发现触摸。

目标只是能够更改触摸的UIImageView的图像。

由于涉及大量的视图,一个简单的循环检查触摸坐标对每个UIImageViews框架只是悬挂我的应用程序。

有没有人有什么建议?

提前致谢。

在我的情况下,最简单的方法是添加一个手势识别器:

UITapGestureRecognizer *singleTap = [[UITapGestureRecognizer alloc] initWithTarget:self action:@selector(singleTapGestureCaptured:)];
//Default value for cancelsTouchesInView is YES, which will prevent buttons to be clicked
singleTap.cancelsTouchesInView = NO; 
[myScrollView addGestureRecognizer:singleTap];   

然后使用此方法捕获触摸:

- (void)singleTapGestureCaptured:(UITapGestureRecognizer *)gesture
  { 
    CGPoint touchPoint=[gesture locationInView:myScrollView];
  }

UIImageView默认关闭触摸处理。 要将userInteractionEnabled设置为YES(请参阅此处的文档http://developer.apple.com/library/ios/#DOCUMENTATION/UIKit/Reference/UIImageView_Class/Reference/Reference.html

此外,如果您想知道在视图层次结构中命中了哪个视图,您可以使用hitTest:withEvent:请参阅UIView中的文档),这将比循环遍历层次结构快得多。

从更广泛的角度来看,我不认为在屏幕上同时拥有900个UIImageView将是一个很好的长期战略。 你有没有调查过通过CoreGraphics绘制屏幕的内容?

您可以在UIImageView对象上轻松实现此方法:

- (UIView *)hitTest:(CGPoint)point withEvent:(UIEvent *)event {
    if ([self pointInside:point withEvent:event]) {
      //You clicked inside the object
    }
    return [super hitTest:point withEvent:event]
}

使用return告诉应用程序下一个触摸响应器(例如uiimageview或scrollview)。

解决此问题的最佳方法是将UIScrollView子类化,向其添加touchesBegan等方法。

@interface MyScroll : UIScrollView
 {

 }

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM