[iOS/Swift] UIView에 touch event 추가하기

민니·2022년 8월 3일
0

iOS

목록 보기
19/22

UIView에 touch event 추가하기

ㄴ 파란색 UIView를 탭하면 tap!이 출력되도록 구현했음


별도의 touch event가 없는 UIView에 touch event를 추가하는 과정을 대충 상상해 본다면, 우선 gesture을 인식할 수 있는 인식기를 만들어 view에 추가해야 하고, gesture 인식 시 일어나게 하고 싶은 작업도 만들어야 할 것이다.
한번 자세하게 알아봅시닷


우선, 뷰컨에 UIView outlet을 만들어 주었음! 이름은 blueView


필요한 놈들

✏️ UITapGestureRecognizer
✏️ addGestureRecognizer(_:)


UITapGestureRecognizer

단일 또는 다중 탭을 해석하는 개별 gesture recognizer

  • UIGestureRecognizer의 서브 클래스
  • 초기화 시
init(
    target: Any?,
    action: Selector?
)

✏️ target: gesture을 인식할 때, action message의 수신자 오브젝트
➡️ 이 경우에 보통은 self를 사용할 것임. 나는 UIView 본인에게 action message를 보낼 것이므로

✏️ action: receiver가 인식한 gesture을 처리하기 위해 target에서 구현된 방법을 식별하는 selector
이라고 나와 있는데 쉽게 정리하자면, gesture을 인식할 때 호출할 메소ㄷㅡ..ㄹ...ㅗ...
➡️ 원하는 작업을 포함하여 Selector 타입으로 메소드 작성


let tapGesture = UITapGestureRecognizer(target: self, action: #selector(tapBlueView))

...

@objc func tapBlueView() {
        print("tap!")
}


addGestureRecognizer

view에 gesture recognizer을 연결함
UIView의 인스턴스 메서드

blueView.addGestureRecognizer(tapGesture)

전체 코드


주의❗️ isUserInteractionEnabled

사용자 이벤트가 무시되고 이벤트 queue서 제거되는지 여부를 결정하는 bool 값

✏️false
ㄴ view에 대한 touch, press, keyboard, focus 이벤트가 무시되고 이벤트 queue에서 삭제됨
✏️ true
ㄴ이벤트가 정상적으로 view에 전달됨
✏️ 기본값은 true

예시의 UIView 같은 경우는 true가 기본으로 설정되어 있지만, UILabel이나 UIImageView 같은 경우는 true로 설정되어 있지 않음. 인스펙터에서 체크해 주거나

xxx.isUserInteractionEnabled = true

를 해 주는 작업이 필요하다 😀


🔗
https://developer.apple.com/

0개의 댓글