2010-06-08 8 views
2

Je suis en train de coder une application sur Ipad, dans un certain point de mon application, je présente un ViewController avec le présentModalViewController. Mon ViewController est un UISScrollView qui prend le plus grand de la modalView et à l'intérieur je montre quelques images, j'autorise pagingEnabled pour que je puisse voir toutes mes images dans le scrollView.Décharger l'image de UIImageView thats hors écran

Parfois j'avoir à afficher plus de 10 images à l'intérieur du ScrollView, je cette erreur mémoire de réception AVERTISSEMENT LEVEL = 1 après celui-ci mémoire de réception AVERTISSEMENT LEVEL = 2 et finnaly le débogueur est sorti en raison de signaux 10 (Sigbus).

Que puis-je faire? est-il un moyen de décharger l'image c'est hors écran? ou d'autres choses à faire?

Merci,

Répondre

1

Je suppose que vous ajoutez toutes les images au UIScrollView? Ensuite, l'iPad doit garder toutes les 10 images en mémoire. S'il s'agit d'images en plein écran, chacune prendra environ 3 Mo de mémoire, vous utilisez donc 30 Mo pour conserver les 10 images dans la vue déroulante.

Vous ne devez ajouter qu'une ou deux images réellement visibles. Une fois qu'ils défilent hors de la vue, retirez le UIImageView de votre UIScrollView (et assurez-vous de ne pas le conserver ailleurs pour qu'il puisse être désalloué). Quand une nouvelle image défile en vue, ajoutez-la au UIScrollView seulement alors.

Dans votre UIScrollViewDelegate méthode -scrollViewDidScroll: obtenir l'actuel contentOffset et l'utiliser pour calculer quelles images sont visibles.

0

En fait, ce problème est encore pire sur l'iPhone 3G, qui ne peut pas gérer même pour afficher deux photos en taille réelle (prise avec son propre appareil photo) en même temps. Si vous pouvez réduire la taille des photos à l'avance en les redimensionnant (côté serveur si vous les arrêtez à partir de vos propres services ou côté client si elles sont générées sur l'appareil ou récupérées à partir de services tiers) , vous devriez. Ils se chargeront plus rapidement, et vous pouvez en mettre plus sur l'écran en une seule fois sans rencontrer de problèmes de mémoire.

La bibliothèque Three20 dispose d'un très bon contrôle de navigation photo pour l'iPhone. Je suis à peu près sûr qu'ils n'ont que trois photos à la fois ... la photo que vous regardez, et les photos en avant ou en arrière.

http://github.com/facebook/three20

Je pense aussi qu'il ya une branche iPad des contrôles Three20 (à ./tree/ipad), bien que je ne sais pas si elles comprennent le navigateur photo ou non, et n'ont pas essayé eux encore moi-même ... peut-être que c'est une option pour vous si vous ne voulez pas passer beaucoup de temps sur cette fonctionnalité particulière de votre application. Si le navigateur de photos iPad n'est pas terminé, vous pouvez simplement adapter la version de l'iPhone à vos besoins (cela ne devrait pas être difficile).

Si vous voulez faire vous-même la fonction, je m'inspire du UITableViewController. Votre contrôleur doit être accompagné des protocoles de source de données et de délégué associés pour récupérer les photos et répondre aux événements de l'utilisateur. La classe de base du contrôleur elle-même devrait réutiliser trois UIImageViews et devrait mélanger ceux autour pour créer l'illusion que l'utilisateur fait défiler une grande liste.

+0

PS.) D'un message lié; Si vous êtes intéressé littéralement comment faire pour faire les "pages virtuelles" dans votre vue de défilement vérifier: http://cocoawithlove.com/2009/01/multiple-virtual-pages-in-uiscrollview.html – Steve