繁体   English   中英

从视图控制器检测触摸是否在移动的UIImageView上

[英]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)并捕获布尔返回值。

http://developer.apple.com/library/ios/#DOCUMENTATION/GraphicsImaging/Reference/CGGeometry/Reference/reference.html

这是CGRect的类参考。

忘记了这个问题-问题是我没有等到viewDidLoad在UIImageView上设置userInteractionEnabled。

暂无
暂无

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

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