Allowing the Simultaneous Recognition of Multiple Gestures

Panther·2021년 8월 2일
0

https://developer.apple.com/documentation/uikit/touches_presses_and_gestures/coordinating_multiple_gesture_recognizers/allowing_the_simultaneous_recognition_of_multiple_gestures

"Learn how to use a delegate object to allow detection of more than one gesture at a time."

동시에 하나 이상의 제스쳐 감지를 허용할 수 있도록 하는 딜리게이트 사용 방법을 알아봅니다.

Overview

동시에 다중 제스쳐 인식할 수 있도록 하는 것이 합리적일 때가 있습니다. Figure 1은 뷰를 화면에서 드래그, 스케일, 회전하는 것을 허용해주는 앱을 나타내고 있습니다. 각 뷰는 팬, 핀치, 회전 제스쳐 리코그나이저의 고유한 집합을 유지하고 있고, 세 가지 제스쳐의 액션을 동시에 수행하기 위한 세 가지 제스쳐 리코그나이저가 가능합니다.

Figure 1 Dragging, scaling, and rotating an object

하나의 제스쳐 리코그나이저를 동시에 다른 제스쳐와 함께 작동하도록 하려면, gestureRecognizer(_:shouldRecognizeSimultaneouslyWith:) 메소드를 구현하고 있는 딜리게이트 객체를 할당해야 합니다. UIKit은 같은 뷰에 있는 제스쳐 리코그나이저의 쌍에 대해 이 메소드를 호출합니다. true를 반환하는 것은 두 제스쳐가 동시에 이벤트를 처리할 수 있도록 해줍니다.

Listing 1은 Figure 1에서 볼 수 있는 앱의 gestureRecognizer(_:shouldRecognizeSimultaneouslyWith:) 메소드를 나타내고 있습니다. 이 메소드는 제스쳐 리코그나이저들이 같은 뷰에 있을 때 true를 반환합니다. 만약 제스쳐 리코그나이저들이 다른 뷰에 있거나 하나의 객체가 long press 제스쳐 리코그나이저라면, 이 메소드는 false를 반환합니다.

Listing 1 Determining when to handle gestures simultaneously

func gestureRecognizer(_ gestureRecognizer: UIGestureRecognizer,
       shouldRecognizeSimultaneouslyWith otherGestureRecognizer: UIGestureRecognizer)
        -> Bool {
   // If the gesture recognizer's view isn't one of the squares, do not
   // allow simultaneous recognition.
   if gestureRecognizer.view != self.yellowView && 
            gestureRecognizer.view != self.cyanView && 
            gestureRecognizer.view != self.magentaView {
      return false
   }
   // If the gesture recognizers are on diferent views, do not allow
   // simultaneous recognition.
   if gestureRecognizer.view != otherGestureRecognizer.view {
      return false
   }
   // If either gesture recognizer is a long press, do not allow
   // simultaneous recognition.
   if gestureRecognizer is UILongPressGestureRecognizer || 
          otherGestureRecognizer is UILongPressGestureRecognizer {
      return false
   }
 
   return true
}

샘플에 대한 더 많은 정보는 Handling Touches Using Responder Methods and Gesture Recognizers를 살펴보시기 바랍니다.

Handling Touches Using Responder Methods and Gesture Recognizers
https://developer.apple.com/library/archive/samplecode/Touches/Introduction/Intro.html#//apple_ref/doc/uid/DTS40007435

0개의 댓글