2012-09-09 140 views
5

在项目中,有一个UIView MyView的和UIImageView MYIMAGE屁股的MyView的,视图层次结构:如何添加手势识别器到UIImageview?

的UIWindow
| - 的UIImageView(MYIMAGE)
| - 的UIView(MyView的)整个屏幕]

然后在视图控制器

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

加入了手势识别来MYIMAGE但姿势不影响MYIMAGE,MYIMAGE有setUserInteractionEnabled:YES。它只会影响myImage放在myView前面时,我该如何解决这个问题?

+0

如果它位于视图后面,它将不会接触到。 – ohr

回答

11

你的UIView明显拦截触摸,然后才能达到UIImageView

您可以将UIImageView放在您的UIView的前面,或者在UIView上禁用用户互动,以便它不会拦截触摸。

如果你需要抓住你的触摸事件更细的颗粒,你可以:

  • 把你UIViewUIImageView的顶部是否具有为设计目的(如果它掩盖了UIImageView有点例如)但要赶不上事件(userInteractionEnabled = NO),并使用不同的UIViewUIImageView低于实际赶上UIImageView
  • 外的事情让你的UIViewUIImageView的顶部,并保持它捕获事件(userInteractionEnabled = YES),但通过继承UIView并覆盖pointInside:withEvent:hitTest:withEvent:方法来过滤通过它的事件。

欲了解更多信息你真的应该读the dedicated Apple Programming Guide related to Event Handling

+0

但myImage必须留在myView后面,是否有一种方法可以在触摸启动时进行检测并确定哪个视图会影响? – pqteru

+0

是的。正如我在我的回答中所述,关闭UIView上的用户交互('userInteractionEnabled = NO')。 如果'UIView'仍然需要捕捉触摸事件,除了'UIImageView'所在的位置,你有多种可能:(1)在UIImageView的顶部使'UIView'成为'userInteractionEnabled = NO' UIImageView“下面的另一个'UIView',用于捕获UIImageView没有捕获到的每个触摸事件;或者(2)将UIView放在UIImageView的顶部,子类和覆盖'hitTest: withEvent:'或'pointInside:withEvent:'UIView方法 – AliSoftware

1

我的代码:

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

两个属性是neccessary做

1) 添加GestureRecognizer到您的UIImageView(self.DGEMLogo) [self.DGEMLogo addGestureRecognizer:按]。

2) 启用设置为TRUE

多数民众赞成你的UIImage财产互动。