Visionneuse d' images

J889J889 Membre
03:47 modifié dans API UIKit #1
Bonjour à  tous,

Je voudrais faire une sorte de visionneuse toute simple qui permet d' afficher une image puis une autre etc... dans une UIImageView aprés avoir cliqué sur un bouton.
J' ai fait un code  qui ne marche pas mais je ne sais pas pourquoi.
Lorsque je clique sur le bouton l' image passe de la numéro 001.jpg à  la 006.jpg.

-(IBAction)droite:(id)sender{<br /> <br />if (largeimage.image = [UIImage imageNamed:@&quot;001.jpg&quot;]){<br />largeimage.image = [UIImage imageNamed:@&quot;002.jpg&quot;];<br />}<br /> <br />if (largeimage.image = [UIImage imageNamed:@&quot;002.jpg&quot;]){<br />largeimage.image = [UIImage imageNamed:@&quot;003.jpg&quot;];<br />}<br /> <br />if (largeimage.image = [UIImage imageNamed:@&quot;003.jpg&quot;]){<br />largeimage.image = [UIImage imageNamed:@&quot;004.jpg&quot;];<br />}<br /> <br />if (largeimage.image = [UIImage imageNamed:@&quot;004.jpg&quot;]){<br />largeimage.image = [UIImage imageNamed:@&quot;005.jpg&quot;];<br />}<br /> <br />if (largeimage.image = [UIImage imageNamed:@&quot;005.jpg&quot;]){<br />largeimage.image = [UIImage imageNamed:@&quot;006.jpg&quot;];<br />}<br />}


Quelqu' un peut m' aider ?

Merci d' avance.

Réponses

  • 03:47 modifié #2
    Ce code mérite sa place dans les plus gros #fail du monde.
  • jgoudeauxjgoudeaux Membre
    03:47 modifié #3
    Heuuu tu as lu ton code ??

    En fait dans ton premier IF tu regarde si c'est égal à  001 et si c'est le cas, tu lui donne le nom 002.
    De suite après, tu regarde si c'est 002.... forcément oui c'est égal du coup ça va faire en quelques milisecondes tu passe de 1 à  6...

    Jte laisse chercher un peu plus ... :D
  • iSofTomiSofTom Membre
    03:47 modifié #4
    Pire encore, tu regardes pas si c'est égal à  ton image:
    <br />if (largeimage.image = [UIImage imageNamed:@&quot;001.jpg&quot;]){<br />
    

    Tu lui affectes ta première image et si l'affectation s'est bien passée, tu lui affectes ta deuxième image, et ainsi de suite  ;D
  • AliGatorAliGator Membre, Modérateur
    03:47 modifié #5
    Nan mais attends lazypup je crois que tu n'as vu que la partie emergée de l'iceberg !

    - Les if qui s'enchaà®nent sans else avec un problème de logique que tu évoques
    - Une affectation (simple "=") pour faire une comparaison
    - Une comparaison d'objets avec "=" (ou == si on corrigeais) et non les méthodes dédiées
    - Comparer un objet de type UIImage plutôt que de faire une machine à  état et comparer les états (ou au minimum les noms des images " et encore " mais pas les images elles-mêmes !!)
    - La répétition et copier/coller (pas de constantes, pas de boucle, pas d'index pour l'itération et le bouclage

    Y'a toutes les mauvaises recettes, en somme ^^
  • DrakenDraken Membre
    septembre 2011 modifié #6
    -(IBAction)droite:(id)sender{

    if (largeimage.image == [UIImage imageNamed:@001.jpg]){
    largeimage.image = [UIImage imageNamed:@002.jpg];
    return; // <= POUR QUITTER LA FONCTION TOUT DE SUITE
    }

    if (largeimage.image == [UIImage imageNamed:@002.jpg]){
    largeimage.image = [UIImage imageNamed:@003.jpg];
    return; <= IDEM
    }

    if (largeimage.image ==[UIImage imageNamed:@003.jpg]){
    largeimage.image = [UIImage imageNamed:@004.jpg];
    return; <= IDEM
    }

    }

    Quoi que non. Je doute que largeimage.image == [UIImage imageNamed:@000.jpg] fonctionne, vu que ce sont deux objets différents !

    J'ajoute que de nos jours les boutons c'est dépassé, enfin sur iOS. C'est plus intuitif d'utiliser une gesture pour passer d'une image à  une autre.

  • J889J889 Membre
    03:47 modifié #7
    Merci à  vous. J' ai pu progresser grace à  vos commentaires.
    Draken, le code que tu as écris marche. Je vais regarder aussi du coté des gesture.

    Merci.
  • AliGatorAliGator Membre, Modérateur
    03:47 modifié #8
    dans 1317053995:

    -(IBAction)droite:(id)sender{

    if (largeimage.image == [UIImage imageNamed:@001.jpg]){
    largeimage.image = [UIImage imageNamed:@002.jpg];
    return; // <= POUR QUITTER LA FONCTION TOUT DE SUITE
    }

    if (largeimage.image == [UIImage imageNamed:@002.jpg]){
    largeimage.image = [UIImage imageNamed:@003.jpg];
    return; <= IDEM
    }

    if (largeimage.image ==[UIImage imageNamed:@003.jpg]){
    largeimage.image = [UIImage imageNamed:@004.jpg];
    return; <= IDEM
    }

    }

    Quoi que non. Je doute que largeimage.image == [UIImage imageNamed:@000.jpg] fonctionne, vu que ce sont deux objets différents !

    J'ajoute que de nos jours les boutons c'est dépassé, enfin sur iOS. C'est plus intuitif d'utiliser une gesture pour passer d'une image à  une autre.
    Mouais ça reste quand même moyen, même si c'est mieux et pourrait potentiellement fonctionner (coup de bol, [tt]imageNamed[/tt] renvoie une image en cache " du moins jusqu'à  ce qu'il y ait un avertissement mémoire, dès que tu en auras un le teste risque de ne plus marcher.

    Et en plus cette solution ne sépare pas proprement le Modèle de la Vue.

    Faut tout simplement implémenter ça sous forme d'une machine à  état, c'est fait pour, c'est bien plus propre, et ça permet de séparer MVC.

    Ceci consiste tout simplement à  faire ceci, rien de plus compliqué :
    currentIndex = (currentIndex+1) % [imageNames count];<br />largeimage.image = [UIImage imageNamed:[imageNames objectAtIndex:currentIndex]];
    
    Où currentIndex est un entier, et imageNames est un NSArray contenant la liste des noms de toutes les images.

    Ou comment réduire un code compliqué, pas objet, pas MVC, non-fonctionnel, et non garanti en un code fonctionnel qui tient en 2 lignes et est plus dans la philisophie objet et MVC...
  • jgoudeauxjgoudeaux Membre
    03:47 modifié #9
    dans 1317053750:

    Nan mais attends lazypup je crois que tu n'as vu que la partie emergée de l'iceberg !

    Ah oui au temps pour moi !
    C'est vrai qu'avec l'habitude et une lecture rapide....tu vois pas le "=" au lieu du "=="..
    héhé
Connectez-vous ou Inscrivez-vous pour répondre.