2009-05-22 17 views
128

Tengo alrededor de 50 objetos CGPoint que describen algo así como una "ruta", y quiero agregarlos a un NSArray. Va a 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 sencilla que me permita definir esos puntos "instantáneamente" al inicializar NSArray con objetos?¿Cómo puedo agregar objetos CGPoint a un NSArray de la manera más fácil?

Respuesta

317

Con UIKit Apple ha añadido soporte para CGPoint a NSValue, por lo que puede hacer:

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

lista como muchos [NSValue] casos y cuando tenga CGPoint, y al final de la lista en nulo. Todos los objetos en esta estructura se lanzan automáticamente.

Por otro lado, cuando se está tirando de los valores de la matriz:

NSValue *val = [points objectAtIndex:0]; 
CGPoint p = [val CGPointValue]; 
+0

Genial. ¿Cómo funcionaría eso para cualquier tipo de tipo escalar? – Thanks

+2

Para los tipos escalares, eche un vistazo a NSNumber ... verá constructores como numberWithBool: numberWithInteger: numberWithFloat :, numberWithUnsignedShort :, etc. –

+4

Alternativamente puede usar NSValue directamente: [NSValue valueWithBytes: & someStructSockaddr objCType: @encode (struct sockaddr)] por ejemplo. –

2

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

7

utilizo este:

Crear matriz:

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

Obtener primero objeto CGPoint:

CGPoint myPoint = [myArray[0] CGPointValue]; 
2

También puede escribir esto en un estándar de C/C++ manera:

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

CGPoint p2 = oldschool[1]; 
Cuestiones relacionadas