2016-01-09 15 views
10

Dla aplikacji, którą robię, chcę, aby użytkownik mógł kliknąć obraz, aby zrobić pełny ekran w aplikacji. A następnie użytkownik, aby móc kliknąć teraz obraz na pełnym ekranie, aby był oryginalny rozmiar.Swift - Jak zrobić obraz po kliknięciu na całym ekranie, a następnie po ponownym kliknięciu na oryginalny rozmiar?

Czy to możliwe?

Każda pomoc będzie świetna, jestem tylko początkującą osobą uczącą się na xcode i jestem zainteresowany wiedzą, jak to zrobić.

Odpowiedz

49

Oto kod, który tworzy obraz pełnoekranowy (z czarnymi pasami w celu zachowania proporcji obrazu) po kliknięciu obrazu.

Aby tego użyć, dodaj ten kod do kontrolera ViewController, który przechowuje obraz.

Następnie za ImageView że chcesz się rozwijać, zaznacz pole wyboru dla userInteractionEnabled w Atrybuty Inspektor i dodać TapGestureRecognizer do niego i ustawić go nazwać 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() 
} 

Ten kod działa, tworząc nowy obraz pełnoekranowy, który obejmuje wszystko inne. Ma własny TapGestureRecognizer, który usuwa obraz pełnoekranowy z jego superwView (i tym samym odsłania oryginalny ekran).


Aktualizacja Swift 3 i 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

Czy to praca dla widoków obrazu wewnątrz widoku tabeli komórce ?? – WoShiNiBaBa

+0

@WoShiNiBaBa, nie rozumiem dlaczego nie. Powinieneś ustawić ** userInteractionEnabled ** dla 'UIImageView' w swojej komórce i programowo dodać' UITapGestureRecognizer' w 'cellForRowAt'. – vacawama

+0

Jak połączyć swój kod z obrazem? –

Powiązane problemy