2010-01-02 9 views
1

Pour étendre sur le sujet, ... sans s'écraser? Je charge environ 15 images en taille réelle à partir de la bibliothèque de photos dans UIImageViews et je reçois des avertissements de mémoire et éventuellement un crash d'application. Ces images vont d'environ 250 Ko à 400 Ko. Les UIImageViews sont réglés sur l'aspect.Comment la photothèque affiche-t-elle autant d'images?

La bibliothèque de photos semble charger des versions plus petites d'images au lieu de simplement redimensionner leurs proportions. Est-ce que quelqu'un sait comment il est capable d'afficher autant sans se briser à cause de l'utilisation de la mémoire?

Répondre

3

Comme vous le dites, vous voulez redimensionner les images. Redimensionner une image est pas tout à fait aussi évident que vous le pensez, mais ce n'est pas difficile:

// h = new height; w = new width; image = UIImage 
CGSize newSize; 
newSize.height = h; 
newSize.width = w; 
UIGraphicsBeginImageContext(newSize); 
[image drawInRect:CGRectMake(0, 0, w, h)]; 
UIImage* newImage = UIGraphicsGetImageFromCurrentImageContext(); 
UIGraphicsEndImageContext(); 

Bien sûr, vous voulez vous assurer que vous relâchez vos vieilles images afin que vous puissiez récupérer la mémoire. La meilleure approche est probablement d'utiliser +imageWithContentsOfFile: car il ne cache pas explicitement.

2

La photothèque effectue de nombreuses optimisations de mémoire, propably:

  1. le chargement d'une vignette de la photo, pour afficher dans le cadre de la galerie
  2. chargement seulement les vignettes pour les photos exposées maintenant (pas ceux dans la page suivante par exemple)
  3. seulement charger les grandes images une fois que c'est réellement nécessaire.
  4. ...

Pour vous rendre la vie plus facile, je vous recommande d'utiliser the Facebook three20 library, qui comprend une visionneuse de photos:

TTPhotoViewController émule l'application Photos d'Apple avec tous ses film n » pincée plaisir. Vous pouvez fournir vos propres "sources photo", qui fonctionnent de manière similaire aux sources de données utilisées par UITableView. Contrairement à l'application Photos d'Apple, elle n'est pas limitée aux photos stockées localement. Vos photos peuvent être chargées à partir du réseau, et de longues listes de photos peuvent être chargées de manière incrémentielle. Le projet a un bon exemple de code, de sorte que vous pouvez commencer à partir de là

En passant, c'est la même vue utilisée dans l'application iPhone Facebook. Voici comment il ressemble:

alt text

+1

Il est bien documenté que trois20 API privées utilisées et un certain nombre de personnes ont eu leur application rejetée pour cela. – user230949

+0

A-t-il déjà été documenté quelles étaient les API privées, quelles applications ont été rejetées, quelles parties de Three20 utilisent des API privées? – Jasarien

+0

Il suffit de chercher sur "three20 private api reject" et vous obtiendrez beaucoup de liens pour plus de détails. – user230949