继承人问题:我想用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个重复点,我不能发布照片)
答案 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;
}