2010-09-15 10 views
10

Estoy intentando usar CGPathApply para iterar sobre cada CGPathElement en un objeto CGPathRef (principalmente para escribir una forma personalizada de persistir en los datos de CGPath). El problema es que, cada vez que se llama a CGPathApply, mi programa falla sin ninguna información. Sospecho que el problema está en la función del aplicador, pero no puedo decirlo. Aquí está una muestra de mi código:Cómo usar CGPathApply correctamente

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

¿Alguna idea de por qué la llamada a este método aplicador parece estar constantemente? Cualquier ayuda es muy apreciada.

+0

http://www.mlsite.net/blog/?p=1312 –

+0

Eche un vistazo aquí, esta es una gran publicación sobre cómo usar CGPathApply correctamente: http://oleb.net/blog/2012/12/accessing-pretty-printing-cgpath-elements / –

Respuesta

8

element->points es una matriz C de CGPoint, no se puede imprimir con ese especificador de formato.

El problema es que no hay forma de saber cuántos elementos contiene esa matriz (ninguno que se me ocurra). Por lo tanto, tendrá que adivinar en función del tipo de operación, pero la mayoría toma un único punto como argumento (CGPathAddLineToPoint, por ejemplo).

lo tanto, una manera apropiada de imprimirlo sería

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

para una operación de ruta que toma un solo punto como argumento.

Espero que ayude!

Cuestiones relacionadas