Dibuja 4.000 puntos o líneas en iOS Objective-C desde dentro de UIViewController

Tengo un NSArray con más de 4.000 CGPoints

[NSArray arrayWithObjects:
                   [NSValue valueWithCGPoint:CGPointMake(213, 30)], ...

y quiero dibujar los puntos o líneas entre ellos desde dentro de mi UIViewController. ¿Cuál es la mejor manera para los dispositivos iOS? gracias

preguntado el 12 de junio de 12 a las 14:06

¿Qué quieres hacer con ellos? ¿Cambiarán los puntos o es un sorteo único? -

primero quiero empezar a dibujar una sola vez. luego quiero un toque de dedos para atraer los puntos a la fuerza, cambiando su posición (y redibujando). -

¿Tiene la intención de volver a dibujarlo cuando el usuario mueve el dedo o después de que el dedo se haya levantado? -

1 Respuestas

¿Parece que estás tratando de trabajar con sprites o generación de partículas? Sin saber más detalles, solo puedo dar una respuesta genérica, pero déjame intentarlo. Supongamos que los puntos son simples cositas de color de 1 píxel. No se requieren gradientes ni rutas, simplemente "establezca el píxel en x, y en rojo/verde/azul".

Debería poder manipular fácilmente 4,000 CALayer objetos simultáneamente:

CALayer *rootLayer = [[self view] layer]; // assumes self is a view controller
NSMutableArray *mSprites = [NSMutableArray array]; // to store references to the layers

for (int i = 0; i < 4000; i++) {
    CALayer *layer = [CALayer layer];
    NSAssert1(layer != nil, @"failed to create CALayer #%i", i);

    layer.backgroundColor = [UIColor colorWithRed:... green:... blue:... alpha:1.0].CGColor;
    layer.frame = CGRectMake(rand(), rand(), 1.0, 1.0);

    [mSprites addObject:layer];
    [rootLayer addSublayer:layer];
}

self.my4000SpritesProperty = mSprites;

Luego, cuando sea el momento de manipularlos, vaya a la matriz en self.my4000SpritesProperty y cambie los marcos de las capas u otras propiedades.

Para 4,000 elementos, debería ver un rendimiento aceptable con Core Animation.

Respondido el 12 de junio de 12 a las 14:06

offtopic: ¿por qué no dibujar los 4000 puntos en el método drawRect? - CarlJ

porque la vista es dinámica y no hay una clase extra para ella. - kit de cabeza

Porque dibujar 4,000 elementos con Quartz/Core Graphics probablemente sería demasiado lento para poder usarlo. - jonathan grynspan

No te olvides de probar en un dispositivo. El simulador se ejecuta mucho más rápido. - jonathan grynspan

No es la respuesta que estás buscando? Examinar otras preguntas etiquetadas or haz tu propia pregunta.