视图上有多个gestureRecognizers-一个不应该通过触摸

时间:2013-06-24 10:14:46

标签: iphone objective-c uigesturerecognizer

在parentClass上(继承自UIView)我有:

[self addGestureRecognizer:_tapGesture]; // _tapGesture is UITapGestureRecognizer, with delegate on parentClass

on someClass:

[_myImageView addGestureRecognizer:_imageViewGestureRecognizer]; // _imageViewGestureRecognizer is UITapGestureRecognizer, with delegate on someClass

问题是,当我点击myImageView时,两个手势识别器都会被触发。我只想让_imageViewGestureRecognizer工作。

我试过了:

- (BOOL)gestureRecognizer:(UIGestureRecognizer *)recognizer shouldReceiveTouch:(UITouch *)touch {
   UIView *gestureView = recognizer.view;
   CGPoint point = [touch locationInView:gestureView];
   UIView *touchedView = [gestureView hitTest:point withEvent:nil];
   if ([touchedView isEqual:_imageViewGestureRecognizer]) {
     return NO;
   }

   return YES;
}

但它不会考虑来自超级类的手势识别器。

1 个答案:

答案 0 :(得分:1)

我做了这个小测试,它运作得很好......

@implementation View

- (id)initWithFrame:(CGRect)frame
{
    self = [super initWithFrame:frame];

    self.backgroundColor = [UIColor whiteColor];

    UITapGestureRecognizer* tap = [[UITapGestureRecognizer alloc] initWithTarget:self action:@selector(tapped1)];
    [self addGestureRecognizer:tap];

    UIImageView* img = [[UIImageView alloc] initWithImage:[UIImage imageNamed:@"test.png"]];
    img.userInteractionEnabled = YES;
    img.frame = CGRectMake(0, 0, 100, 100);
    [self addSubview:img];

    UITapGestureRecognizer* tap2 = [[UITapGestureRecognizer alloc] initWithTarget:self action:@selector(tapped2)];
    [img addGestureRecognizer:tap2];

    return self;
}

-(void)tapped1 {
    NSLog(@"Tapped 1");
}

-(void)tapped2 {
    NSLog(@"Tapped 2");
}

@end

你想要的是iOS的默认行为。一旦子视图处理了触摸,其超级视图将不再接收触摸。你在imageView上设置了userInteractionEnabled吗?