我正在尝试使用CGPathApply遍历CGPathRef对象中的每个CGPathElement(主要是编写一种自定义方式来持久化CGPath数据)。问题是,每次调用CGPathApply时,我的程序都崩溃,根本没有任何信息。我怀疑问题出在applier函数中,但我无法确定。这是我的代码示例:
- (IBAction) processPath:(id)sender {
NSMutableArray *pathElements = [NSMutableArray arrayWithCapacity:1];
// This contains an array of paths, drawn to this current view
CFMutableArrayRef existingPaths = displayingView.pathArray;
CFIndex pathCount = CFArrayGetCount(existingPaths);
for( int i=0; i < pathCount; i++ ) {
CGMutablePathRef pRef = (CGMutablePathRef) CFArrayGetValueAtIndex(existingPaths, i);
CGPathApply(pRef, pathElements, processPathElement);
}
}
void processPathElement(void* info, const CGPathElement* element) {
NSLog(@"Type: %@ || Point: %@", element->type, element->points);
}
关于为什么调用此applier方法似乎崩溃的任何想法?任何帮助是极大的赞赏。
最佳答案
element->points
是CGPoint
的C数组,您不能使用该格式说明符将其打印出来。
麻烦的是,没有办法知道该数组包含多少个元素(无论如何我都无法想到)。因此,您必须根据操作类型进行猜测,但是大多数操作都将单点作为参数(例如CGPathAddLineToPoint)。
因此,将其打印出来的正确方法是
CGPoint pointArg = element->points[0];
NSLog(@"Type: %@ || Point: %@", element->type, NSStringFromCGPoint(pointArg));
用于以单点作为参数的路径操作。
希望对您有所帮助!