我怎么知道一个 CGPoint 数组是不是靠近另一个 CGPoint 数组?
Posted
技术标签:
【中文标题】我怎么知道一个 CGPoint 数组是不是靠近另一个 CGPoint 数组?【英文标题】:How can i know if an array of CGPoint is close to another array of CGPoint?我怎么知道一个 CGPoint 数组是否靠近另一个 CGPoint 数组? 【发布时间】:2013-11-13 19:25:33 【问题描述】:我有一个使用函数 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 的点有多远?
【问题讨论】:
“containsPath 不起作用”是什么意思?它应该工作。请注意,贝塞尔路径必须关闭才能进行测试。 你的意思是使用 [path closePath] 吗? 是的,完全正确。 (在containsPoint:
文档中提到。)
它有效,但我必须如此精确地触摸,有没有设置偏移量?或类似的东西,我的意思是误差范围
那个我不知道。
【参考方案1】:
使用CGPathCreateCopyByStrokingPath
创建路径的粗描边版本(例如,将lineWidth
设置为22)。然后测试该点是否在该描边路径或您的原始路径中。
Ole Begemann: CGPath Hit Testing
【讨论】:
让我试试这个解决方案以上是关于我怎么知道一个 CGPoint 数组是不是靠近另一个 CGPoint 数组?的主要内容,如果未能解决你的问题,请参考以下文章