Dibuja 4.000 puntos o líneas en iOS Objective-C desde dentro de UIViewController
Frecuentes
Visto 359 veces
0
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
1 Respuestas
2
¿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 objective-c ios nsarray cgpoint or haz tu propia pregunta.
¿Qué quieres hacer con ellos? ¿Cambiarán los puntos o es un sorteo único? - David Rönnqvist
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). - headkit
¿Tiene la intención de volver a dibujarlo cuando el usuario mueve el dedo o después de que el dedo se haya levantado? - David Rönnqvist