2016-01-09 6 views
10

Per l'app che sto facendo voglio che l'utente sia in grado di fare clic su un'immagine per renderla a schermo intero sull'app. E poi l'utente per poter fare clic sull'immagine ora a schermo intero per renderla la dimensione originale.Swift - Come posso fare un'immagine a schermo intero quando si fa clic e quindi la dimensione originale quando si fa clic di nuovo?

È possibile?

Qualsiasi aiuto sarebbe fantastico, io sono solo uno studente principiante su xcode e sono interessato a sapere come farlo.

risposta

49

Questo è il codice che crea un'immagine a schermo intero (con barre nere per conservare le proporzioni) quando si fa clic sull'immagine.

Per utilizzare questo, aggiungere questo codice al ViewController che contiene l'immagine.

Poi, per il vostro ImageView che si desidera espandere, selezionare la casella per userInteractionEnabled nel Attributi, e aggiungere un TapGestureRecognizer ad esso e lo mise chiamare 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() 
} 

Questo codice si basa sulla creazione di una nuova immagine a tutto schermo che copre tutto il resto. Ha il proprio TapGestureRecognizer che rimuove l'immagine a schermo intero dalla sua superView (e quindi scopre lo schermo originale).


Aggiornamento per Swift 3 e 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() 
} 
+1

Fa questo lavoro per le viste di immagini all'interno delle cellule vista tabella ?? – WoShiNiBaBa

+0

@WoShiNiBaBa, non vedo perché no. Dovresti impostare ** userInteractionEnabled ** per 'UIImageView' nella tua cella e aggiungere' UITapGestureRecognizer' a livello di codice in 'cellForRowAt'. – vacawama

+0

Come si collega il codice a un'immagine? –

Problemi correlati