¿Cómo puedo agregar objetos CGPoint a un NSArray de la manera fácil?

129

Tengo alrededor de 50 objetos CGPoint que describen algo así como una "ruta", y quiero agregarlos a un NSArray. Será un método que simplemente devolverá el CGPoint correspondiente para un índice dado. No quiero crear 50 variables como p1 = ...; p2 = ..., y así sucesivamente. ¿Hay alguna manera fácil que me permita definir esos puntos "instantáneamente" al inicializar el NSArray con objetos?

Gracias
fuente

Respuestas:

324

Con UIKitApple agregó soporte para CGPoint NSValue, para que pueda hacer:

NSArray *points = [NSArray arrayWithObjects:
                     [NSValue valueWithCGPoint:CGPointMake(5.5, 6.6)],
                     [NSValue valueWithCGPoint:CGPointMake(7.7, 8.8)],
                     nil];

Enumere todas las instancias [NSValue] que tenga CGPoint y finalice la lista en cero. Todos los objetos en esta estructura se liberan automáticamente.

Por otro lado, cuando extrae los valores de la matriz:

NSValue *val = [points objectAtIndex:0];
CGPoint p = [val CGPointValue];
Jarret Hardie
fuente
3
Para tipos escalares, eche un vistazo a NSNumber ... verá constructores como numberWithBool: numberWithInteger: numberWithFloat :, numberWithUnsignedShort :, etc.
Jarret Hardie
44
Alternativamente, puede usar NSValue directamente: [NSValue valueWithBytes: & someStructSockaddr objCType: @encode (struct sockaddr)] por ejemplo.
Jim Dovey
7

Yo uso esto:

Crear matriz:

NSArray *myArray = @[[NSValue valueWithCGPoint:CGPointMake(30.0, 150.0)],[NSValue valueWithCGPoint:CGPointMake(41.67, 145.19)]];

Obtenga el primer objeto CGPoint:

CGPoint myPoint = [myArray[0] CGPointValue];
Tibidabo
fuente
3

También puede escribir esto en una forma mínima de:

CGPoint myArray[] = { CGPointMake(5.5, 6.6), CGPointMake(7.7, 8.8) };

CGPoint p2 = myArray[1];
GilesDMiddleton
fuente
2

¿Has echado un vistazo CFMutableArray? Eso podría funcionar mejor para ti.

Ramin
fuente