Question

Donc, celui-ci est assez étrange, je ne suis pas sûr que le problème est avec l'API d'actifsLibrary, mais je ne peux pas comprendre ce qui pourrait se passer d'autre.

Je charge un tableau avec des alaquets à l'aide de la méthode -EnmerateassetsUnterblockblock sur AlsserSetsGroup. Lorsqu'il complète, je charge un défileur d'image personnalisé. Lorsque le défileur finit le défilement, j'utilise NSInvocationOperations pour charger les images pour les vues actuellement visibles (pages) à partir de la photothèque sur disque. Une fois que l'image est chargée et est mise en cache, elle notifie le délégué qui saisit ensuite l'image du cache et l'affiche dans une vue d'image dans le défileur.

Tout fonctionne bien, mais le temps qu'il prend à partir de la fois -Image: se fait appeler au moment où il apparaît visiblement à l'écran, il est parfois insupportable - parfois 10 secondes ou plus pour se présenter.

Je l'ai essayé à la fois avec et sans redimension de l'image qui n'ajoute presque rien au temps de traitement lorsque je fais le redimensionnement. Comme je l'ai dit, le ralentissement est quelque part après avoir appelé -SetImage sur la vue de l'image. Est-ce que quelqu'un est au courant d'une sorte d'aspect de l'API d'assetLibrary qui pourrait causer cela?

Voici un code pertinent:

- (void)setImagesForVisiblePages;
{
  for (MomentImageView *page in visiblePages)
  {
    int index = [page index];
    ALAsset *asset = [photos objectAtIndex:index];

    UIImage *image = [assetImagesDictionary objectForKey:[self idForAsset:asset]];

    // If the image has already been cached, load it into the
    // image view. Otherwise, request the image be loaded from disk.
    if (image)
    {
      [[page imageView] setImage:image];
    }
    else {
      [self requestLoadImageForAsset:asset];      
      [[page imageView] setImage:nil];
    }
  }  
}

Était-ce utile?

La solution

Cela gâchera probablement toutes les recherches sur le Web cherchant à résoudre les problèmes avec l'actifLibrary, de sorte que je m'excuse.Il s'avère que le problème n'était pas l'actifLibrary du tout, mais plutôt mon utilisation de multi-threading.Une fois que l'image a terminé le chargement, je posais une notification à l'aide du nsnotificationCenter par défaut.Il l'a posté sur le fil d'arrière-plan qui met ensuite à jour (ou essayant de mettre à jour, au moins) l'UIImageView avec -Setimage.Une fois que je l'ai changé pour utiliser --PerformSelectorOnlaintHread et que ce sélecteur a plutôt défini l'image, tout allait bien.

semble peu importe à quel point je suis familier avec un multi-filetage, j'oublie toujours les petits gotchas de temps en temps.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top