UIImagePickerController et UIImagePopoverController, faible réactivité.

Bonjour à  tous,



Bon ça faisait un bout de temps que je n'était pas venu demandé conseils image/wink.png' class='bbc_emoticon' alt=';)' />.



J'ai juste une question. Voila pour mon appli iPad j'utilise un UIImagePickerController dans un UIPopoverController, afin d'afficher l'album photo de l'iPad et permettre à  l'utilisateur de récupérer une de ces photos.



Seulement voila, dès que je dépasse 20 / 25 photos la réactivité de la fenêtre est bizarre et même semble ramer. De plus le scroll n'es pas bloqué et me permet même de continuer à  monter (ou descendre) alors même que je suis déjà  en haut (ou en bas).

Je cale le code que j'ai remis dans un projet à  part pour voir si cela venit de mon projet ou du code en question.



ViewController.h
<br />
#import &lt;UIKit/UIKit.h&gt;<br />
@interface ViewController : UIViewController &lt;UINavigationControllerDelegate, UIImagePickerControllerDelegate, UIPopoverControllerDelegate&gt;<br />
{<br />
	UIImagePickerController *Picker;<br />
}<br />
@property (weak, nonatomic) IBOutlet UIImageView *uneImage;<br />
-(IBAction)album:(id)sender;<br />
@end<br />






ViewController.m
<br />
#import &quot;ViewController.h&quot;<br />
@interface ViewController ()<br />
@property (strong, nonatomic) UIPopoverController *masterPopover;<br />
@end<br />
@implementation ViewController<br />
@synthesize masterPopover = _masterPopover;<br />
- (IBAction)album:(id)sender<br />
{<br />
	Picker = [[UIImagePickerController alloc] init];<br />
	Picker.delegate = self;<br />
	Picker.sourceType = UIImagePickerControllerSourceTypePhotoLibrary;<br />
  <br />
	// Création de la popover<br />
	_masterPopover = [[UIPopoverController alloc] initWithContentViewController:Picker];<br />
	_masterPopover.delegate = self;<br />
	[_masterPopover setPopoverContentSize:CGSizeMake(500, 500) animated:YES];<br />
	[_masterPopover presentPopoverFromRect:CGRectMake(215, 946, 500, 500) inView:self.view permittedArrowDirections:UIPopoverArrowDirectionDown animated:YES];<br />
}<br />
- (void)imagePickerController:(UIImagePickerController *)picker didFinishPickingMediaWithInfo:(NSDictionary *)info<br />
{<br />
	_uneImage.image = [info objectForKey:UIImagePickerControllerOriginalImage];<br />
	[_masterPopover dismissPopoverAnimated:YES];<br />
}<br />
- (void)imagePickerControllerDidCancel:(UIImagePickerController *)picker<br />
{<br />
	[_masterPopover dismissPopoverAnimated:YES];<br />
	_uneImage.image = nil;<br />
}<br />
- (void)viewDidLoad<br />
{<br />
	[super viewDidLoad];<br />
// Do any additional setup after loading the view, typically from a nib.<br />
}<br />
- (void)didReceiveMemoryWarning<br />
{<br />
	[super didReceiveMemoryWarning];<br />
	// Dispose of any resources that can be recreated.<br />
}<br />
@end<br />

Réponses

  • LarmeLarme Membre
    février 2013 modifié #2
    Une question (j'ai pas tout lu, j'ai pas fait joujou avec ces outils-là ) : Tu demandes à  iOS de rescaler tes images ? Cela peut peut-être la source de la consommation excessive de ressources...
  • J'avoue ne pas avoir trifouiller dans les méthodes de UIImagePickerController mais bon il le fait tout seul ci-joint une impression écran :

    147765Capturedcran20130228092657.png
  • samirsamir Membre
    février 2013 modifié #4
    Hello,



    C'est un peu normal que ça ramme, tu a un problème de mémoire avec toutes ces images. Les images prises par la caméra ont une résolution [font=Consolas, Menlo, Monaco,]1600 x 1200,[/font]

    La solution : Toi t'a pas besoin de toute cette résolution pour les afficher dans un popover, donc il faut les resizer et les stocker ailleurs ( Documents par exemple) ou bien meme dans l'album photo.
  • Justement le but de cette popover et de permettre la récupération des images dans l'album photo et de le copier dans mon dossier documents. Ceci pour permettre l'accès à  l'utilisateur des photos qu'il a besoin sans avoir à  charger tout l'album. Mon soucis se cale vraiment sur le combo UIImagePickerController et UIPopoverController.



    J'ai essayé de le mettre dans une fenêtre modal comme sur iPhone. Mais xCode crie au scandal car sur iPad le UIImagePickerController DOIT àŠTRE dans une UIPopoverController...
  • Hello,



    Moi je ferais comme suis :



    1. Je récupère mes les images de l'album photo.



    2. Je les resize ( cherche sur internet y adu code pour faire ça).



    3. Je les enregistrent dans Documents.



    4. Le popOver vas chercher les images qui sont dans documents ( avec la nouvelle résolution).



    voila.
  • CeetixCeetix Membre
    février 2013 modifié #7
    Je comprends pas pourquoi vous parlez de taille des images etc ... Un ImagePickerController ne va pas s'amuser à  charger les thumbnails de l'album photo avec la photo d'origine. Ce serait totalement stupide. Ce que tu vois en aperçu ce sont des miniatures créées dès que tu enregistres une image (donc max 20 ko ?). Le problème n'est pas de ce côté. Tu affiches pour le moment les images de Photos.app dans ton PopOver on est bien d'accord ?



    Tu as essayé de tracer les performances avec Instrument ?
  • 'Ceetix' a écrit:




    ... Un ImagePickerController ne va pas s'amuser à  charger les thumbnails de l'album photo avec la photo d'origine. Ce serai totalement stupide.




    On parle de ce problème dans ce Thread.



    http://stackoverflow.com/questions/1282830/uiimagepickercontroller-uiimage-memory-and-more
  • Je vois pas le rapport. On est à  l'étape de parcourt d'image dans la librairie. On a même pas sélectionné l'image (et encore moins 3 images puisque dans ce cas il faudrait passer par ALAsset pour la multiple sélection).
  • AliGatorAliGator Membre, Modérateur
    Je plussoie Ceetix.

    Le UIImagePicker utilise les thumbnails (précalculés et pré-enregistrés) il n'ouvre pas l'image d'origine pour afficher les vignettes.

    Le souci ne vient pas de là .

    Il faut regarder avec Instruments.
  • Ok tester avec Instrument sous le simulateur pas de soucie. C'est vraiment une fois sur l'iPad. Mon application doit être définitivement trop lourd.



    Bon je vais voir comment alléger le reste ar une fois isolé je n'ai plus de problème, ce n'ext vraiment qu'une fois intégré dans mon application que là  ça racle.
  • CeetixCeetix Membre
    février 2013 modifié #12
    Et pourquoi tu ne testes pas avec Instrument sur ton device ?
  • Parceque dès fois je suis un peu con... image/biggrin.png' class='bbc_emoticon' alt=':D' />
  • SpekSpek Membre
    mars 2013 modifié #14
    Oh ben flute alors. Après test avec Instruments sur iPad. La mémoire ne bouge, le CPU n'ont plus. Il ne monte pas spécialement en charge.....



    La seul différence avec le code dans un projet unique c'est qu'il est intégré sur une application importante. Mais après il n'y a rien de particulier....



    Je n'y comprend rien à  ce phénomène.
  • SpekSpek Membre
    Bon mon problème ne doit pas venir de UIImagePickerController car après test j'ai un souci autre qui est je pense est lié et vais créer un topic dessus. Alors je ne sais pas si il faut mettre la balise Résolu ou un truc du style "voir dans l'autre topic" ? Merci de me dire j'éditerais mon post en conséquence.
Connectez-vous ou Inscrivez-vous pour répondre.