0

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

这是我的代码:

-(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 个代表点我无法发布图片)

4

2 回答 2

1

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

根据文档。

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

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

- (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
}
于 2012-08-16T03:18:22.763 回答
1

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

在 Header 中使 UIGestureRecognizer 委托

(在 viewDidLoad 中)

tapGesture.delegate = self;

然后实现:

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

{
 return YES;
}
于 2012-08-17T16:07:21.630 回答