有时候我们需要判断一个点是否在一个范围之内,如果不在该范围内需要舍弃/特殊处理该点。用到的方式是官网推荐的方法。
CGPathContainsPoint
一个点是否在一个圆内
UIBezierPath *bezierPath = [UIBezierPath bezierPathWithArcCenter:CGPointMake(self.view.center.x , self.view.center.y)
radius:(100)
startAngle:0
endAngle:(M_PI * 2)
clockwise:true];
CGPathRef testPath = bezierPath.CGPath;
CGPoint point = CGPointMake(self.view.center.x, self.view.center.y + 100);
if (CGPathContainsPoint(testPath, NULL, point, NO)) {
NSLog(@"point in path!");
}else{
NSLog(@"point out path!");
}
说明:1.bezierPath.CGPath
的类型是 CGPathRef
类型
2.CGPathContainsPoint
函数第一个参数正好需要一个CGPathRef
类型,所以正好使用贝塞尔曲线绘制一个圆,判断是否在圆内,即可。
同理,使用贝塞尔曲线绘制一个三角形,多边形...即可一个point
判断是否在该区域内。
如果想在界面上显示该区域可以使用CAShapeLayer
去显示。
CAShapeLayer *layer0 = [CAShapeLayer layer];
layer0.lineWidth = 5;// 线宽
layer0.frame = CGRectMake(0, 0, UIScreen.mainScreen.bounds.size.width, UIScreen.mainScreen.bounds.size.height);
layer0.fillColor = UIColor.clearColor.CGColor; // 空心
layer0.strokeColor = UIColor.orangeColor.CGColor; // 橘色边
layer0.path = bezierPath.CGPath;// 重点
[self.view.layer addSublayer:layer0];
网友评论