[英]Detect if a touch is on a moving UIImageView from a View Controller
我有一个UIViewController,它使用touchesBegan
检测触摸事件。 屏幕上漂浮着移动的UIImageView对象,我需要查看一下触摸事件是否落在其中之一上。 我正在尝试:
UITouch* touch = [touches anyObject];
if ([arrayOfUIImageViewsOnScreen containsObject: [touch view]]) {
NSLog(@"UIImageView Touched!");
}
但这永远不会发生。 另外,如果我要做这样的事情:
int h = [touch view].bounds.size.height;
NSLog([NSString stringWithFormat: @"%d", h]);
它每次都会输出整个UIViewController(屏幕)的高度,即使我触摸了其中一个UIImageViews,也很明显[touch view]
并没有提供UIImageView。 当仅按下UIImageView时如何检测? 请不要建议使用UIButtons。
谢谢!
如果只想检测何时按下UIImageView,请检查该类:
if (touch.view.class == [UIImageView class]) {
//do whatever
}
else {
//isnt a UIImageView so do whatever else
}
编辑 - -
您尚未将UIImageView的userInteraction设置为启用吗?
我知道您说过,请不要建议使用UIButtons,但是按钮听起来对我来说是最好/最简单的方法。
您可以尝试通过触摸之一将hitTest消息发送到主视图的CALayer-它会返回您所触摸的子视图层次结构最下方的CALayer。
然后,您可以测试以查看您触摸的图层是否是其中一个UIImageView的图层,然后从此处继续。
此代码使用从UIGestureRecognizer生成的点。
CGPoint thePoint = [r locationInView:self.view];
thePoint = [self.view.layer convertPoint:thePoint toLayer:self.view.layer.superlayer];
selectedLayer = [self.view.layer hitTest:thePoint];
如果要检查触摸方式,请使用CGRectContainsPoint。
1.捕获触摸事件并获取触摸点,
2.制作一个CGRect来界定要检查触摸事件的对象,
3.使用CGRectContainsPoint(CGRect,CGPoint)并捕获布尔返回值。
这是CGRect的类参考。
忘记了这个问题-问题是我没有等到viewDidLoad在UIImageView上设置userInteractionEnabled。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.