点击手势错误,识别点击错误的视图

时间:2012-08-16 00:41:15

标签: ios uiwebview uigesturerecognizer uitapgesturerecognizer

继承人问题:我想用NSLog测试TapGestureRecognizer,但TapGestureRecognizer除了UIWebView之外的任何地方都可以运行,我不明白为什么......

Heres My Code:

-(void)viewDidLoad {
UITapGestureRecognizer *tapGesture = [[UITapGestureRecognizer alloc] initWithTarget:self action:@selector(bookmarker:)];
tapGesture.numberOfTapsRequired = 2;
[self.view addGestureRecognizer:tapGesture];
[tapGesture release];
   }

继承人IBAction:

-(IBAction)bookmarker:(UITapGestureRecognizer *)trecognizer{
NSLog(@"TAPPED");
}

这是我希望它在以下功能中运行的视图:

http://i.stack.imgur.com/3UPor.png

这是它的功能:

http://i.stack.imgur.com/nGmwq.png

(对不到10个重复点,我不能发布照片)

2 个答案:

答案 0 :(得分:1)

您正在将识别器添加到顶视图中,该视图的任何子视图也将触发手势识别器的操作。

Per doc。

  

将手势识别器附加到视图定义了所表示手势的范围,使其接收对该视图及其所有子视图进行了测试的触摸。视图保留了手势识别器。

您可以检查识别器的触摸位置,看看它是否在您的子视图中。

- (CGPoint)locationInView:(UIView *)view

然后进行检查。

bool CGRectContainsPoint (
   CGRect rect,
   CGPoint point
);

从记忆中写作,希望它有效:

CGPoint point = [recognizer locationInView:self.view];
CGRect rect = subView.frame;
bool inside = CGRectContainsPoint(rect, point);

if (!inside) {
    //do your code
}

答案 1 :(得分:1)

我发现网页视图不接受TapGestureRecognizer,因为它有自己的一组手势,所以要实现它:

在Header中创建UIGestureRecognizer委托

(在viewDidLoad中)

tapGesture.delegate = self;

然后执行:

- (BOOL)gestureRecognizer:(UIGestureRecognizer *)gestureRecognizer shouldRecognizeSimultaneouslyWithGestureRecognizer:(UIGestureRecognizer *)otherGestureRecognizer

{
 return YES;
}