para hacer gratis fotos collages collage apps app ios ios5 ios6 smooth-scrolling nscache

ios - hacer - photo grid video



Logre un desplazamiento suave para Photo Grid con miles de imágenes desde el disco (2)

Tengo un PhotoGrid con tres fotos en cada fila, implementado con UITableView .

Tengo una memoria caché en la memoria (usando NSCache) que tiene una capacidad para 100 imágenes, por lo que en algún momento tendré al menos 100 imágenes en la memoria a pesar de que tengo miles de imágenes en el disco para mostrar en la Grid.

Todas mis imágenes son 4KB-20KB JPEG.

Entonces, con esta infraestructura, las imágenes se cargan y descargan continuamente de NSCache cuando el usuario se desplaza por la cuadrícula de fotografías. Con el desplazamiento normal todo se ve bien, obtengo alrededor de 55-58 fps.

Cuando el usuario comienza a desplazarse más rápido de un lado a otro, tengo dos casos:

  1. Si se separa la tarea de carga de imágenes del hilo principal, termino perdiendo imágenes en la cuadrícula de fotos, porque mis celdas se muestran antes de que las imágenes se lean en la memoria.

    (UITableViewCell *) tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath { dispatch_async(dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT, 0), ^{ UIImage *image = getImageFromCacheForImagePath:imagePath; dispatch_async(dispatch_get_main_queue(), ^{ cell.leftGridItem.imageView.image = image; }); }); }

  2. Si tengo la tarea de carga de imágenes en el hilo principal, hay un tartamudeo. Obtengo alrededor de 36-45 fps.

    (UITableViewCell *) tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath { UIImage *image = getImageFromCacheForImagePath:imagePath; cell.leftGridItem.imageView.image = image; }

getImageFromCacheForImagePath:imagePath obtiene la imagen inmediatamente de NSCache, si no, la imagen se carga desde el archivo y se configura en NSCache para su uso posterior, pero establezco el límite de NSCache en 100.

Cosas que intenté / pellizqué:

  1. Evite clipsToBounds para vistas de imágenes de cuadrícula.
  2. Cargando imágenes en el hilo de fondo.
  3. Uso de NSOperation Queues.
  4. Cargando imágenes en lotes de 100 (funciona, pero con el desplazamiento rápido, el tiempo de carga de la imagen se retrasó).

Estoy tratando de lograr la misma sensación que la aplicación de fotos nativa.

Tus sugerencias son apreciadas.



Implementé una tabla de desplazamiento suave con más de 700 imágenes. La clave no era solo cargar imágenes en segundo plano sino también cambiar su tamaño en segundo plano para que se adaptaran perfectamente al contenedor. Al parecer, el cambio de tamaño es una operación demasiado pesada para hacerlo en el hilo de la interfaz de usuario.