10

CGPathApply を使用して、CGPathRef オブジェクト内の各 CGPathElement を反復処理しようとしています (主に、CGPath データを永続化するためのカスタム方法を作成するため)。問題は、CGPathApply を呼び出すたびに、プログラムが何の情報もなくクラッシュすることです。問題はアプライヤー関数にあると思われますが、わかりません。これが私のコードのサンプルです:

- (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);
}

このアプライヤーメソッドの呼び出しがクラッシュしているように見える理由について何か考えはありますか? どんな助けでも大歓迎です。

4

1 に答える 1

8

element->pointsは の C 配列であるCGPointため、その書式指定子を使用して出力することはできません。

問題は、その配列が保持する要素の数を知る方法がないことです (いずれにせよ、私には思いつきません)。そのため、操作の種類に基づいて推測する必要がありますが、ほとんどの場合、単一のポイントを引数として取ります (たとえば、CGPathAddLineToPoint など)。

したがって、それを印刷する適切な方法は次のようになります

CGPoint pointArg = element->points[0];
NSLog(@"Type: %@ || Point: %@", element->type, NSStringFromCGPoint(pointArg));

単一のポイントを引数として取るパス操作の場合。

それが役立つことを願っています!

于 2010-12-18T21:55:05.043 に答える