ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • Gesture Recognizer
    iOS 2020. 12. 2. 18:56

    안녕하세요. 그린입니다!

    이번 포스팅에서는 Gesture Recognizer에 대해 살펴보겠습니다.

     

    개발을 하다보면 사용자의 터치나 스와이프/롱 프레스 같은 반응에 대해 처리를 해줘야하는 경우가 많습니다.

    제가 이번에 애플리케이션을 제작하며 구현해보는 과정에서 텍스트 필드에서 키보드가 올라오고 해당 키보드가

    다른 부분을 터치할때 내려가게 하고싶어 이것저것 찾아봤습니다.

     

    그럼 함께 그런것들을 하려면 어떤 방법이 있는지 무슨 차이가 있는지 보겠습니다 !!!

     

    크게 터치에 대해 반응을 구현할때는 2가지가 있습니다.

    touch VS Gesture Recognizer

    1. touchBegan/Ended/Moved/Cancelled

    -. touchBegan: 터치가 시작되는 시점에 메서드를 호출

    -. touchEnded: 터치가 종료되는 시점에 메서드를 호출

    -. touchMoved: 터치가 움직일때, 쉽게 생각하면 손가락을 움직이면 호출 (손가락을 드래그 하거나 그런 움직이는 동작)

    -. touchcancelled: 터치가 취소될때 호출

     

    2. Gesture Recognizer

    스토리보드에서 Gesture에 관련된 요소들을 찾으면,

    Tap / Pinch / Rotation / Swipe / Pan / Screen Edge Pan / Long Press와 같이 정말 많이 나오는걸 볼 수 있다.

    한번 탭하는지 늘리는지 스와이프하는지 심지어 펜으로 동작을 하는지까지 Gesture Recognizer가 많이 사용된다.

     

    이번에 구현하고 있는 부분에서는 Tap Gesture Recognizer을 사용하여 화면이 탭 되는 제스쳐를 인식해 호출이 되게 하였다.

     

    이렇게 보면 위 touchesBegan하고 다를게 없는것 같은데 무슨 차이가 있을까?????

     

    둘을 같이 구현해보면 touchesBegan이 먼저 호출된다.

    이유는 Tap Gesture Recognizer는 사용자의 제스쳐가 이상없는지 인식하는 시간이 필요하다.

    예를들어 사용자가 Tap으로 구현을 하였는데 Pinch나 Long Press와 같은 행동을 하면 이것이 Tap Gesture인지 파악하는 시간이 든다.

     

    사용자의 편의와 행동을 Gesture Recognizer이 더 신경썼다는 느낌이 든다.

    예를들어 Tap Gesture를 통해 코드를 구현하였는데, 만약 탭이 아닌 꾹 누르는등 사용자가 의도치 않은 행동을 했을때

    touchesBegan은 터치가 이뤄졌다고 인식해 바로 호출되지만, Tap Gesture는 바로 호출되지 않는다.

     

    사용자라면 Gesture Recognizer가 사용되어 구현된 애플리케이션이 더 편리하고 사용자를 배려한다고 생각할것이다.

    또한, Gesture Recognizer에는 다양한 제스쳐들을 구현할 수 있도록 잘 만들어져 있어 활용하기에 좋을것 같다.

     

    해당 제스쳐를 구현하는 방법은 스토리보드에서 배치하여 연결해주는 방법과 코드로 전부 구현하는 방법이 있다.

    코드로 전부 구현을 하면 아래와 같은 식으로 구현이 될 수 있다.

        override func viewDidLoad() {
            super.viewDidLoad()
            
            let tapRecognizer = UITapGestureRecognizer(target: self, action: #selector(tapView(gestureRecognizer:)))
            self.view.addGestureRecognizer(tapRecognizer)
        }
            
        @objc func tapView(gestureRecognizer: UIGestureRecognizer) {
            self.view.endEditing(true)
        }

    다른 부분을 탭하면 키보드 입력판이 내려가게 구현한 코드이다.

     

    이렇게 이번에는 Tap Gesture Recognizer를 활용하여 구현을 해보았지만,

    Xcode에 많이 있는 제스쳐의 UI 요소들을 다뤄보며 포스팅 하겠습니다~!!

    감사합니다!

    'iOS' 카테고리의 다른 글

    단위테스트와 TDD  (0) 2020.12.15
    AppDelegate & SceneDelegate  (0) 2020.12.07
    UML  (0) 2020.12.02
    View LifeCycle (생명주기)  (0) 2020.11.24
    KVO와 Notification 간단 정리  (0) 2020.11.19
Designed by Tistory.