plus - la camara trasera de mi iphone 7 no funciona
Aplicación iOS: problema de retraso cuando se muestra una gran cantidad de imágenes pequeñas (2)
Es cada imagen en su propia vista?
En cualquier caso, para una cantidad tan grande de imágenes probablemente deberías considerar dibujarlas en 1 vista y si ese método de dibujo es aún demasiado lento podrías dibujarlo una vez, renderizar la vista en una imagen y luego simplemente dibujar esa imagen a medida que se almacena en caché monitor.
Hay varias guías disponibles de Apple que se ocupan de la ejecución del dibujo de vista personalizada y cosas así. Deberías darles una lectura.
Ambiente:
Estoy creando una aplicación de " mosaico de fotos " y trato de mostrar 1024 (32 * 32) piezas de imágenes pequeñas (tamaño de retina-> w: 30px h: 20px) en la pantalla al mismo tiempo. Lo que significa que en total, es del mismo tamaño que el tamaño de imagen de pantalla completa.
Problema:
Cargué 1024 UIImages, creo 1024 UIImageViews y los agrego a un UIView. Cuando me desplazo a esta vista, hay un gran retraso: prueba en iPhone4 (iOS 5) y iPhone5 (iOS 6). Simplemente aparece en iPhone4, y en iPhone5 está bien. (Suponiendo que iPhone5 tenga una CPU mucho mejor, entonces creo que es razonable).
Lo que pienso:
Supongamos que todas las imágenes ya se han cargado desde el directorio local en la memoria (usando el método "imageNamed"), por lo que creo que el problema debe estar en alguna parte del paso mostrar / renderizar las imágenes.
Entonces, ¿alguna idea al respecto? Cualquiera, cualquier idea será útil.
Muchas gracias,
ACTUALIZAR
Es mucho mejor después de seguir el consejo de @Antwan van Houdt. Aquí está el código principal:
-(void)updateCoverImageView:(UIImageView *)smallImage{
UIGraphicsBeginImageContextWithOptions(self.frame.size, NO, 0.0f);
CGContextRef ctx = UIGraphicsGetCurrentContext();
[self.coverImageView.layer renderInContext:ctx];
[smallImage.image drawInRect:smallImage.frame];
self.coverImageView.image = UIGraphicsGetImageFromCurrentImageContext();
UIGraphicsEndImageContext();
}
Luego, simplemente establece el valor alfa de smallImage en cero, por lo que el sistema no los renderizará. Y la imagen de portada lo reemplazará. Eso funciona para el problema de retraso causado por mostrar una gran cantidad de UIView al mismo tiempo.
Si no se conocen todos los detalles de su código, cualquier cosa como esta, debe hacerse en un hilo de fondo. Me gustaría leer sobre contextos gráficos, grand central dispatch y luego utilizar ambos conceptos para crear la imagen resultante en otro hilo y luego obtener la imagen resultante y mostrarla en el hilo principal.
De hecho, ya que tiene muchas imágenes que pueden procesarse en paralelo, se puede hacer muy rápido con GCD.
Si puede publicar el código, puedo ayudarlo a optimizarlo.