我想知道我的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
谢谢:)
答案 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
更有效。