[self.view addGestureRecognizer:({
UITapGestureRecognizer *tap = [[UITapGestureRecognizer alloc] initWithTarget:self action:@selector(tapClickAction)];
tap.delegate = self;
tap;
})];
- (void)tapClickAction{
//...
}
#pragma mark - UIGestureRecognizerDelegate
- (BOOL)gestureRecognizer:(UIGestureRecognizer *)gestureRecognizer shouldReceiveTouch:(UITouch *)touch
{
if ([gestureRecognizer locationInView:self.view].y>CGRectGetMaxY(self.topMenuView.bounds)&&[gestureRecognizer locationInView:self.view].y<self.functionalView.y) {
return YES;
}
}
#pragma mark - UIGestureRecognizerDelegate
- (BOOL)gestureRecognizer:(UIGestureRecognizer *)gestureRecognizer shouldReceiveTouch:(UITouch *)touch
{
if ([touch locationInView:self.view].y>CGRectGetMaxY(self.topMenuView.bounds)&&[touch locationInView:self.view].y<self.functionalView.y) {
return YES;
}
}
UIGestureRecognizer 与UITouch 都有一个 locationInView:
方法。
VC中,self.view添加了一个WKWebView,然后在网页空白除点击。
上面的两种方案中:
[touch locationInView:self.view]
返回的是点击点在self.view的位置,返回类型为CGPoint,有效,是正确的点击位置。[gestureRecognizer locationInView:self.view].y
返回为0,失效。