관리 메뉴

김종권의 iOS 앱 개발 알아가기

[iOS - SwiftUI] gesture, simultaneousGesture 동작 개념 (SwiftUI 제스처의 특성) 본문

iOS 응용 (SwiftUI)

[iOS - SwiftUI] gesture, simultaneousGesture 동작 개념 (SwiftUI 제스처의 특성)

jake-kim 2025. 1. 16. 01:55

gesture 동작 개념

  • gesture는 거의다 아는 것이지만, 특성이 존재
    • gesture가 즉각 이벤트가 감지되지 않고 일정 시간 0.3초 정도의 딜레이를 두고 그동안 입력된 이벤트를 총괄하여 어떤 제스처인지 파악
    • 만약 2번 탭 제스쳐와, 1번 탭 제스쳐가 같이 등록되어 있다면 

ex) 2번 탭 제스쳐와, 1번 탭 제스쳐가 같이 등록된 케이스

  • gesture는 일정 딜레이를 두고 감지되므로, 2번 탭했을 때 첫번째 탭에 바로 1중 탭 제스쳐가 감지되지 않고 2중 탭 제스쳐가 감지됨
  • 빠르게 2번 탭하면 2중 탭 이벤트만 감지되고, 1번만 탭하면 1중 탭 이벤트만 감지
.gesture(TapGesture(count: 2).onEnded {
    message = "Tap twice!"
    boxColor = .orange
})
.gesture(TapGesture().onEnded {
    message = "Tap"
    boxColor = .cyan
})

빠르게 2번 탭하면 1중 탭 이벤트는 무시

simultaneousGesture 란?

  • 일반 gesture는 0.3초의 딜레이를 두고 이벤트를 감지 했지만, simultaneousGesture는 딜레이 없이 바로 제스처를 감지함

ex) simultaneousGesture로 두 개가 등록된 상태

 

.simultaneousGesture(TapGesture(count: 2).onEnded {
    message = "Tap twice!"
    boxColor = .orange
})
.simultaneousGesture(TapGesture().onEnded {
    message = "Tap"
    boxColor = .cyan
})

빠르게 2번 탭하면 1중 탭 제스처와 2중 탭 제스처 둘 다 동작

결론

  • gesture는 내부적으로 debounce를 두고 시간이 지난 다음에 주어진 인풋들을 대상으로 제스처를 감지
  • simultaneousGesture는 인풋이 들어오면 제스처를 곧바로 감지

* 참고

- https://developer.apple.com/documentation/swiftui/simultaneousgesture

Comments