Ila*_*ian 17 iphone objective-c
我的问题类似于此.
我有2个CGPathRef,1个将通过手指触摸移动.我想找到2 CGPathRef是否相交?这个问题大约在2年前被问到,我想知道是否在某些时候找到了一些东西.
这是相当陈旧的,但我发现它寻找一个类似的解决方案,在我的问题中我想找到一个圆与路径重叠(你的问题的一个特例).
我通过使用CGPathCreateCopyByStrokingPath圆的半径作为笔划宽度创建原始路径的描边版本来解决这个问题.如果圆的中心点与描边路径重叠,则原始路径与圆重叠.
BOOL CGPathIntersectsCircle(CGPathRef path, CGPoint center, CGFloat radius)
{
CGPathRef fuzzyPath;
fuzzyPath = CGPathCreateCopyByStrokingPath(path, NULL, radius,
kCGLineCapRound,
kCGLineJoinRound, 0.0);
if (CGPathContainsPoint(fuzzyPath, NULL, center, NO))
{
CGPathRelease(fuzzyPath);
return YES;
}
CGPathRelease(fuzzyPath);
return NO;
}
Run Code Online (Sandbox Code Playgroud)
编辑:未发布fuzzyPath的小错误.
我为CGPathRefs编写了一个基于小像素的路径冲突检测API.它要求你为项目添加一些源目录,它只适用于ARC,但它至少应该告诉你如何做这样的事情.它基本上在两个不同的上下文中绘制两条路径,然后逐像素检查以查看两条路径上是否有任何像素.显然,每次用户拖动手指时运行速度都会很慢,但它确实可以每半秒钟左右完成一次,甚至可能不在主线程上.
这是我发现做这样的事情的最简单的方法,除了使用大量数学之外,很可能没有更好的方法.
| 归档时间: |
|
| 查看次数: |
7884 次 |
| 最近记录: |