En mi aplicación necesita algo así como un sistema de partículas, así que hizo lo siguiente:¿Cómo mostrar eficientemente muchas imágenes? (IPhone de programación)
Si bien la aplicación inicializa cargo un UIImage
laserImage = [UIImage imageNamed:@"laser.png"];
UIImage * laserImage se declara en la interfaz de mi controlador Ahora cada vez que necesita una nueva partícula este código hace que uno:
// add new Laserimage
UIImageView *newLaser = [[UIImageView alloc] initWithImage:laserImage];
[newLaser setTag:[model.lasers count]-9];
[newLaser setBounds:CGRectMake(0, 0, 17, 1)];
[newLaser setOpaque:YES];
[self.view addSubview:newLaser];
[newLaser release];
Por favor, observe que las imágenes sólo son 17px * 1px pequeña y model.lasers es una matriz interna que hacer todo el cálculo de separado de la salida gráfica. Así que en mi bucle principal dibujo que puse todas las posiciones de la UIImageView a las posiciones calculadas en mi model.lasers matriz:
for (int i = 0; i < [model.lasers count]; i++) {
[[self.view viewWithTag:i+10] setCenter:[[model.lasers objectAtIndex:i] pos]];
}
que incrementa las etiquetas en un 10 porque el valor predeterminado es 0 y no quiero mover todos las vistas con la etiqueta predeterminada.
Así que la animación se ve bien con alrededor de 10 - 20 imágenes, pero realmente se vuelve lenta cuando se trabaja con cerca de 60 imágenes. Entonces mi pregunta es: ¿hay alguna forma de optimizar esto sin comenzar de nuevo en OpenGl ES?
Esta es la respuesta correcta. Su código funcionará bien siempre y cuando use CALayers y tenga cada uno de ellos el mismo layer.contents configurado en la misma imagen CG. Volver a cablear toda su juego en OpenGL pueden ser excesivos, sólo tiene que no asignar toneladas de UIImageView, que es la raíz de su problema de implementación. ver http://developer.apple.com/library/ios/#DOCUMENTATION/Cocoa/Conceptual/CoreAnimation_guide/SettingUpLayerObjects/SettingUpLayerObjects.html#//apple_ref/doc/uid/TP40004514-CH13-SW12 – MoDJ