[英]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.