检查CGPathRef中CGPoints数量的最有效方法

时间:2014-10-10 19:44:00

标签: ios function cgpoint cgpath

我想知道我的CGMutablePathRef是否有超过3分!这种检查会经常发生,所以我正在寻找有效的解决方案。

这个原因我需要这样做是因为在我的项目中用户绘制了一个形状。当用户拖动他/她的手指时,CGPoint(手指的当前位置)被添加到路径中并且当调​​用touchEnded:时添加物理身体..现在如果用户刚刚点击屏幕,则CGMutablePathRef仅具有一个点它(我的理由在我脑海中)当我使用我的CGMutablePathRef添加物理身体时,我得到以下错误。

Assertion failed: (count >= 2), function CreateChain, file /SourceCache/PhysicsKit/PhysicsKit-6.5.4/PhysicsKit/Box2D/Collision/Shapes/b2ChainShape.cpp, line 45.

我希望调用一个函数来调用cgpathref作为参数并计算点数,直到它达到3(如果没有' 3则结束)并返回一个bool

谢谢:)

2 个答案:

答案 0 :(得分:2)

如果要枚举CGPath的元素,则必须使用CGPathApply,并且不支持提前终止。您必须枚举所有元素。

this answer抓取我的Rob_forEachElementOfCGPath功能,并按照以下方式使用它:

int numberOfSegmentsInCGPath(CGPathRef path) {
    __block int count = 0;
    Rob_forEachElementOfCGPath(path, ^(const CGPathElement *element) {
        if (element->type != kCGPathElementMoveToPoint) {
            ++count;
        }
    });
    return count;
}

答案 1 :(得分:1)

没有特别有效的方法,但您可以在添加点时跟踪点数。

@interface MyPath : NSObject
@property (assign) int pointCount;
@property (assign) CGPathRef path;
@end

如果你想确保你完全控制它(并且不想担心其他人增加你的计数或改变你的路径而不增加),你可以使这些属性只读并有一个“加点”对象的功能......不是很好,但它比ApplyPath更有效。