0

我使用函数 addCurveToPoint 有一个由 CGPoint 数组组成的 UIBezierPath,下面是一些代码:

UIBezierPath *path = [[UIBezierPath alloc] init];
[path setLineWidth:10];
[path moveToPoint:pts[0]];
for(int i = 0; i<[array count]; i++) {
     [path addCurveToPoint:[array objectAtIndex:i] controlPoint1:pts[1] controlPoint2:pts[2]];
}

当在视图上识别到触摸时,我得到了触摸点,我需要将它与 UIBezierPath 的 GCPoint 进行比较,并说明它是否在 UIBezierPath 内部。我使用的是函数 containsPoint 但它不起作用,这是我的代码:

- (void)touchesMoved:(NSSet *)touches withEvent:(UIEvent *)event
{
    UITouch *touch = [touches anyObject];
    CGPoint p = [touch locationInView:self];
    CGPoint point = CGPointMake(p.x, p.y);
    NSLog(@"actual point x %f y %f", point.x, point.y);

    if ([path containsPoint:point]) {
        NSLog(@"it contains the point");
    }
}

最后,我需要获取所有触摸点的集合,并说明触摸点是否在 UIBezierPath(或其中大部分)内并添加边距错误,因此触摸不需要如此精确,也怎么能我说 UIBezierPath 的意义有多远?

4

1 回答 1

2

用于CGPathCreateCopyByStrokingPath创建路径的粗描边版本(例如,lineWidth设置为 22)。然后测试该点是否在该描边路径或您的原始路径中。

Ole Begemann:CGPath 命中测试

于 2013-11-13T19:45:57.577 回答