iOS

[ iOS ] UIImageView 클릭 시 화면 전환 - UITapGestureRecognizer

Forest Yun 2022. 1. 18. 21:12
728x90

공부한 내용을 정리한 글입니다.

 

문제

UIImageView 클릭 시 화면 전환되도록 구현

 

 

 

 

 

UIImageView를 클릭해 화면전환 액션을 수행하게 하기 위해서는 UITapGestureRecogniger를 사용해야 한다.

https://88yhtserof.tistory.com/40

 

[ iOS ] UITapGestureRecogniger

UITapGestureRecogniger 단일 또는 다중의 tap을 해석하는 개별 gersture recognizer. UITapGestureRecognizer는 UIGestureRecognizer의 구체적인 하위 클래스이다. gersture recognizer의 경우, 지정된 수의 손..

88yhtserof.tistory.com

 

 

 

storyboard를 사용해 tap할 imageView를 배치한 후 해당 imageView의 아울렛 변수를 생성한다.

@IBOutlet weak var img: UIImageView!

 

UITapGestureRecognizer의 객체 생성 후 tap한 뒤 할 액션을 함수 형태로 전달한다.

 ImageView의 inUserInteractionEnabled 프로퍼티를 true로 설정하고, addGestureRecognizer 메서드를 통해 ImageView에 GerstureRecognizer을 할당 해준다.

func tapImageView() {
        let recognizer = UITapGestureRecognizer(target: self, action: #selector(actionImageView))
        
        img.isUserInteractionEnabled = true
        img.addGestureRecognizer(recognizer)
        
    }

 

 

전환할 화면을 위해 storyboard에 새 ViewController를 추가한다. 그리고 'ResultViewController'라는 이름으로 Cocoa Touch Class를 생성한다.

아까 만든 새 ViewController에 ResultViewController 클래스를 할당해주고, Storyboard Id도 'ResultViewController'로 지정한다.

 

 

 

 

recognizer에 할당해준 함수를 작성해보자.

먼저 select란?

Selector : 메서드를 식별할 수 있는 고유한 이름.

UIKit 내부에 Objective-C 런타임으로 실행되는 메서드가 Selector 타입의 파라미터를 가질 때  사용한다. 보통 #selector(함수)를 사용하여 인스턴스를 생성한다. 추가적으로, Selector를 생성할 때 전달할 인자인 함수는 @objc 키워드를 붙여 선언되어야 한다. 왜냐하면 앞서 언급했듯이 Selector가 Objective-C 런타임으로 실행되는 메서드의 전달인자로 들어가기 때문이다.

 

이어서 함수 내부에 화면 전환 기능을 구현해보자.

코드로 화면 전환 시 두 가지로 나눌 수 있는데, navigationController를 사용하는 방법과 present하는 방법이 있다.

오늘은 present하는 방법을 사용할 것이다.

storyboard Id를 사용해 원하는 ViewController를 찾아내어 instantiateViewController()를 통해 인스턴스화한다. 

인스턴스화한 UIViewController를 각 타입에 맞는 ViewController, 즉 여기서는 ResultViewController로 다운캐스팅하면 해당 ViewController의 프러퍼티와 메서드를 사용할 수 있다.

 

다음으로 이렇게 생성한 인스턴스를 present에 인자로 전달하여 화면이 뜨도록 하자.

@objc func actionImageView() {
        guard let resultViewController = self.storyboard?.instantiateViewController(identifier: "ResultViewController") as? ResultViewController else {return}
        
        resultViewController.modalPresentationStyle = .fullScreen //화면 style 변경
        
        present(resultViewController, animated: true, completion: nil)
    }

 

 

 

 

 

 

 

 

 

 

 

 

UITapGestureRecognizer:
https://developer.apple.com/documentation/uikit/uitapgesturerecognizer
Selector:
https://woozzang.tistory.com/120
728x90