Partage
  • Partager sur Facebook
  • Partager sur Twitter

[iOS] chargement UIimage

Sujet résolu
    4 octobre 2012 à 11:36:29

    Bonjour,

    Sur mon application Iphone je voudrait charger une liste d'actualités.Chaque actualité comporte une vignette(miniature) et une image. On arrive donc sur une tableView avec la liste des miniatures puis on clic pour passé sur l'actualité.

    Mon problème est au niveau du chargement des images, au lancement de l'appli je charge toutes les images pour que la navigation par la suite soit fluide.

    Les images sont chargés dans une boucle :

    url2 = [NSURL URLWithString:urlName];  
    myImage = [UIImage imageWithData:[NSData dataWithContentsOfURL:url2]];


    Auriez vous une idée pour diminuer le temps de chargement?
    • Partager sur Facebook
    • Partager sur Twitter
      4 octobre 2012 à 15:10:42

      Tu fais ca en asynchrone: tu stocke l'url dans ta bdd au chargement de l'appli, et lorsque la cellule est affichée (cellforRow...), tu download l'image si elle n'a pas été déjà download, sinon tu l'affiche.
      Si tu utilise coreData pour ta bdd tu peux stocker ton image dedans dans une entité à part (oublie pas de cocher la case "Store in External Record File" pour optimiser les performances!).
      • Partager sur Facebook
      • Partager sur Twitter
        4 octobre 2012 à 16:38:27

        Je suis parti entre temps sur cette solution :

        au chargement de l'application je stocke les urls des vignette, par defaut j'affiche un gif pour toutes les vignette et en asynchrone je download les images et met à jour. Est ce possible? je bloque sur le reload. voici mon code :

        [NSThread detachNewThreadSelector:@selector(loadActuVignette)
                                     toTarget:self withObject:nil];
        
        - (void) loadActuVignette
        {
            
            Donnees *allDatas = [Donnees sharedInstance];
            allDatas.listeActu = [json objectForKey:@"listeActualites"];
            
            
            NSString *urlName = nil;
            NSURL *url2 = nil;
            UIImage *myImage = nil;
            
            
            for(int i = 0 ; i < [allDatas.listeActu count] ; i++){
                
                urlName= [[allDatas.listeActu objectAtIndex:i] valueForKey:@"vignette"];  
                url2 = [NSURL URLWithString:urlName];  
                myImage = [UIImage imageWithData:[NSData dataWithContentsOfURL:url2]];  
                [allDatas.listeActuVignette addObject:myImage];
                NSLog(@"vignette %@",myImage);
                
          
            };
            
            NSIndexPath *a = [NSIndexPath indexPathForRow:0 inSection:0]; // O pour tester une cellule fixe
        
            ActualitesTableViewCell *b = [self.tableView cellForRowAtIndexPath:a];
            
            b.image.image = myImage;
            b.titre.text = @"test";
            [self.tableView reloadData];
          
        }




        edit :
        Je ne garde aucune information en sqllite ni coredata, j'utilise des objets avec une instance unique.Est beaucoup mieux d'utiliser core data chachant que les actualités affichés sont les 10 dernières et donc change très souvent.
        • Partager sur Facebook
        • Partager sur Twitter
          4 octobre 2012 à 18:44:23

          Dès que tu manipule des elements graphiques, tu dois le faire sur la mainThread, donc faut que tu fasses ton reloadData dans la mainThread:
          Tu peux utiliser performSelectorOnMainThread pour ca.



          • Partager sur Facebook
          • Partager sur Twitter
            4 octobre 2012 à 19:56:40

            Bonsoir,

            J'ai rajouté le tag dans le titre de ton sujet afin qu'il soit conforme aux règles du forum "Mobile".

            Merci de faire attention à l'avenir. :)
            • Partager sur Facebook
            • Partager sur Twitter
            Si vous voulez me retrouver, rendez-vous sur ZesteDeSavoir.
              4 octobre 2012 à 21:32:17

              OK désolé je serait plus attentif la prochaine fois


              Edit : merci chose faite grâce à la méthode "performSelectorOnMainThread", merci pour ton indication en ce qui concerne les élément graphique et cette méthode
              • Partager sur Facebook
              • Partager sur Twitter

              [iOS] chargement UIimage

              × Après avoir cliqué sur "Répondre" vous serez invité à vous connecter pour que votre message soit publié.
              × Attention, ce sujet est très ancien. Le déterrer n'est pas forcément approprié. Nous te conseillons de créer un nouveau sujet pour poser ta question.
              • Editeur
              • Markdown