web-dev-qa-db-fra.com

Swift - Comment puis-je faire une image en plein écran lorsque vous cliquez dessus, puis la taille d'origine lorsque vous cliquez à nouveau?

Pour l'application que je crée, je veux que l'utilisateur puisse cliquer sur une image pour la faire en plein écran sur l'application. Et puis l'utilisateur de pouvoir cliquer sur l'image maintenant en plein écran pour lui donner la taille d'origine.

Est-ce possible?

Toute aide serait formidable, je suis juste un débutant apprenant sur xcode et je suis intéressé à savoir comment faire cela.

29
Tessa

Voici le code qui crée une image en plein écran (avec des barres noires pour conserver les proportions) quand une image est cliquée.

Pour l'utiliser, ajoutez ce code à votre ViewController qui contient l'image.

Ensuite, pour votre imageView que vous souhaitez développer, cochez la case serInteractionEnabled dans l'inspecteur d'attributs , et ajoutez un TapGestureRecognizer et définissez-le appelez imageTapped.

@IBAction func imageTapped(sender: UITapGestureRecognizer) {
    let imageView = sender.view as! UIImageView
    let newImageView = UIImageView(image: imageView.image)
    newImageView.frame = UIScreen.main.bounds
    newImageView.backgroundColor = .blackColor()
    newImageView.contentMode = .ScaleAspectFit
    newImageView.userInteractionEnabled = true
    let tap = UITapGestureRecognizer(target: self, action: "dismissFullscreenImage:")
    newImageView.addGestureRecognizer(tap)
    self.view.addSubview(newImageView)
    self.navigationController?.isNavigationBarHidden = true
    self.tabBarController?.tabBar.isHidden = true
}

func dismissFullscreenImage(sender: UITapGestureRecognizer) {
    self.navigationController?.isNavigationBarHidden = false
    self.tabBarController?.tabBar.isHidden = false
    sender.view?.removeFromSuperview()
}

Ce code fonctionne en créant une nouvelle image plein écran qui couvre tout le reste. Il a son propre TapGestureRecognizer qui supprime l'image plein écran de sa superView (et découvre ainsi l'écran d'origine).


Mise à jour pour Swift 3 et 4:

@IBAction func imageTapped(_ sender: UITapGestureRecognizer) {
    let imageView = sender.view as! UIImageView
    let newImageView = UIImageView(image: imageView.image)
    newImageView.frame = UIScreen.main.bounds
    newImageView.backgroundColor = .black
    newImageView.contentMode = .scaleAspectFit
    newImageView.isUserInteractionEnabled = true
    let tap = UITapGestureRecognizer(target: self, action: #selector(dismissFullscreenImage))
    newImageView.addGestureRecognizer(tap)
    self.view.addSubview(newImageView)
    self.navigationController?.isNavigationBarHidden = true
    self.tabBarController?.tabBar.isHidden = true
}

@objc func dismissFullscreenImage(_ sender: UITapGestureRecognizer) {
    self.navigationController?.isNavigationBarHidden = false
    self.tabBarController?.tabBar.isHidden = false
    sender.view?.removeFromSuperview()
}
84
vacawama