5

在项目中,myView 后面有一个UIViewmyView 和一个UIImageViewmyImage,视图层次结构:

UIWindow
|-- UIImageView (myImage)
|-- UIView (myView) [全屏]

然后在 ViewController 中的 myImage 中添加一个手势识别器

UITapGestureRecognizer *tapGesture = [[UITapGestureRecognizer alloc] initWithTarget:self action:@selector(handleSingleTap:)];
        tapGesture.numberOfTapsRequired = 1;
        [myImage addGestureRecognizer:tapGesture];

但是手势不影响 myImage,myImage 有setUserInteractionEnabled:YES. 只有当myImage放在myView前面时才会有影响,请问这个问题怎么解决?

4

2 回答 2

10

UIView显然在触摸到达之前拦截了触摸UIImageView

你可以把你放在你UIImageView的前面UIView,或者禁用用户交互,UIView这样它就不会拦截触摸。

如果您需要更精细地捕捉触摸事件,您可以:

  • 如果出于设计目的必须这样做(例如,如果它掩盖了UIView一点),但使它不捕获事件(UIImageViewUIImageViewuserInteractionEnabled = NOUIViewUIImageViewUIImageView
  • 保持你UIView的顶部UIImageView并保持它捕捉事件(userInteractionEnabled = YES),但过滤通过它的事件,通过子类化你的UIView并覆盖pointInside:withEvent:hitTest:withEvent:方法。

有关更多信息,您应该真正阅读与事件处理相关的专用 Apple 编程指南

于 2012-09-09T12:17:47.180 回答
1

我的代码:

UILongPressGestureRecognizer *press = [[UILongPressGestureRecognizer alloc] 
initWithTarget:self action:@selector(hasLongPressed)];
[press setMinimumPressDuration:0.1f]; //1ms
press.delegate = (id)self;
[self.DGEMLogo addGestureRecognizer:press];

有两个属性是必须做的

1.) 将 GestureRecognizer 添加到您的 UIImageView (self.DGEMLogo) [self.DGEMLogo addGestureRecognizer:press];

2.) 设置你的 UIImage 属性 Interaction enabled 为 TRUE

就这样。

于 2013-05-23T07:00:13.993 回答