iOS判定当前点击的位置是否在某个视图上
记载几种判定触摸点是否在某个view上面的方法
第一种方式:isDescendantOfView:
通过touch.view调用 isDescendantOfView:方法,返回 YES, 则触摸点在我们必要判定的视图上;反之则不在。
- (void)touchesBeganNSSet<UITouch *> *)touches withEventUIEvent *)event { UITouch *touch = [touches.allObjects lastObject]; BOOL result = [touch.view isDescendantOfView:self.blueView]; NSLog(@"%@点击在蓝色视图上", result ? @"是" : @"不是");}第二种方式:locationInView:和 containsPoint 联合利用
- (void)touchesBeganNSSet<UITouch *> *)touches withEventUIEvent *)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,(即判定的是子视图,传入子视图的.bounds)。
- (void)touchesBeganNSSet<UITouch *> *)touches withEventUIEvent *)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)touchesBeganNSSet<UITouch *> *)touches withEventUIEvent *)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 ? @"是" : @"不是");} |