iOS判断当前点击的位置是否在某个视图上
记录几种判断触摸点是否在某个view
上面的方法
-
第一种方式:
isDescendantOfView:
通过
touch.view
调用isDescendantOfView:
方法,返回YES
, 则触摸点在我们需要判断的视图上;反之则不在。- (void)touchesBegan:(NSSet<UITouch *> *)touches withEvent:(UIEvent *)event { UITouch *touch = [touches.allObjects lastObject]; BOOL result = [touch.view isDescendantOfView:self.blueView]; NSLog(@"%@点击在蓝色视图上", result ? @"是" : @"不是"); }
-
第二种方式:
locationInView:
和containsPoint
结合使用- (void)touchesBegan:(NSSet<UITouch *> *)touches withEvent:(UIEvent *)event { UITouch *touch = [touches.allObjects lastObject]; CGPoint point = [touch locationInView:self.blueView]; BOOL result = [self.blueView.layer containsPoint:point]; NSLog(@"%@点击在蓝色视图上", result ? @"是" : @"不是"); }
-
第三种方式:
locationInView:
和CGRectContainsPoint
结合使用locationView
如果传入的是需要判断视图(self.blueView)
的父视图,CGRectContainsPoint
则需要传入需要判断视图(self.blueView)
的frame
,否则传入bounds
.- (void)touchesBegan:(NSSet<UITouch *> *)touches withEvent:(UIEvent *)event { UITouch *touch = [touches.allObjects lastObject]; CGPoint point = [touch locationInView:self.blueView]; BOOL result = CGRectContainsPoint(self.blueView.bounds, point); NSLog(@"这次%@点击在蓝色视图上", result ? @"是" : @"不是"); }
-
第四种方式:坐标转换convertPoint:fromLayer: 再判断是否是在该视图范围内 containsPoint:
- (void)touchesBegan:(NSSet<UITouch *> *)touches withEvent:(UIEvent *)event { CGPoint point = [[touches anyObject] locationInView:self.view]; point = [self.blueView.layer convertPoint:point fromLayer:self.view.layer]; BOOL result = [self.blueView.layer containsPoint:point]; NSLog(@"%@点击在蓝色视图上", result ? @"是" : @"不是"); }