Cours 1H Pour créer votre première app iPhone avec Xcode 11

Bonjour.

J’ai suivi le cour « 1H Pour créer votre première app iPhone », mais avec Xcode 11.

Et j’ai deux petits problèmes.

Premièrement, je ne trouve pas le bouton « Library » avec l’action « Show Media Library » pour glisser l’image dans imageView.image. En fouillant un peu sur Internet, j’ai vu qu’il faut à priori maintenant utiliser imageView.image = UIImage(named: "photo1").

Est-ce exact ?

Ensuite quand je fais mon if/else pour alterner entre les deux images, la première fois que j’appuie sur le bouton, rien ne se passe. Là encore je vérifie la photo actuellement affichée avec if (imageView.image == UIImage(named: "photo1")).

Si je fais un print du contenu de l’image à chaque appui sur le bouton, j’obtiens cela après 4 appuis :
Optional(<UIImage:0x600003599950 named(main: photo1) {800, 533.33333333333337}>)
Optional(<UIImage:0x600003594630 named(main: photo1) {800, 533.33333333333337}>)
Optional(<UIImage:0x6000035997a0 named(main: photo2) {800, 530}>)
Optional(<UIImage:0x60000359c510 named(main: photo1) {800, 533.33333333333337}>)

Si vous avez une idée, je suis preneur :slight_smile:

Merci.

Salut,

Je te renvoie vers ce lien, ou ce sujet a déjà été traité.

https://community.purplegiraffe.fr/t/cours-1h-sur-iphone-probleme-imageview-image/2198/13

1 J'aime

Super, merci !

En passant par Image Literal j’arrive à ajouter l’image directement dans le code. C’est moins pratique qu’en passant par le bouton mais ça fonctionne :slight_smile:

En revanche j’ai toujours le problème du if sur le premier appui sur le bouton de changement d’image.

Voici mon code :

@IBAction func changeImage(_ sender: Any) {
if (imageView.image == #imageLiteral(resourceName: « photo1 »)) {
imageView.image = #imageLiteral(resourceName: « photo2 »)
} else {
imageView.image = #imageLiteral(resourceName: « photo1 »)
}
}

J’ai bien photo1 dans les propriétés de mon imageView dans le storyboard, mais la première fois que j’appuie, je passe dans le else. Les fois suivantes ça fonctionne.

En faisant des prints, j’ai remarqué que imageView.image est un Optional. J’ai donc remplacé par imageView.image! dans le if, mais ça ne change rien.

J’avoue ne pas comprendre.

Ton code fonctionne chez moi, donc est ce que tu as bien relié ton code à l’interface graphique ?

Voici mon code pour être sûr :

import UIKit

class ViewController: UIViewController {

    @IBOutlet weak var imageView: UIImageView!
    
    @IBAction func changeImage(_ sender: Any) {
        if imageView.image == #imageLiteral(resourceName: "photo1.jpg") {
            imageView.image = #imageLiteral(resourceName: "photo2")
        } else {
            imageView.image = #imageLiteral(resourceName: "photo1")
        }
    }
}

Je pense que tout est relié, puisque l’action fonctionne à partir de la deuxième fois que je touche le bouton.

Comment initialises-tu l’ImageView ? Y’a-t-il une image dedans au démarrage de l’application ?

Oui, il y a l’image photo1 qui est directement mise depuis le storyboard.