iOS 判断一个点(CGpoint)是否在一个区域之内(圆/三角形/多边形)[2021-02-24]

有时候我们需要判断一个点是否在一个范围之内,如果不在该范围内需要舍弃/特殊处理该点。用到的方式是官网推荐的方法。
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];

你可能感兴趣的:(iOS 判断一个点(CGpoint)是否在一个区域之内(圆/三角形/多边形)[2021-02-24])