다음을 통해 공유


포인터 제스처 인식

.NET 다중 플랫폼 앱 UI(.NET MAUI) 포인터 제스처 인식기는 포인터가 뷰 내에서 들어오고 나가고 이동할 때를 감지하고 클래스를 사용하여 PointerGestureRecognizer 구현됩니다. 이 클래스는 다음과 같은 속성을 정의합니다.

이러한 속성은 BindableProperty 개체에서 지원하며, 따라서 데이터 바인딩의 대상이 될 수 있고 스타일이 지정될 수 있습니다.

클래스는 PointerGestureRecognizer 다음 이벤트도 정의합니다.

  • PointerEntered- 포인터가 뷰의 경계 영역에 들어갈 때 발생합니다.
  • PointerExited- 뷰의 경계 영역에 있는 포인터가 해당 경계 영역을 떠날 때 발생합니다.
  • PointerMoved- 뷰의 경계 영역 내에서 다시 기본 동안 포인터가 이동할 때 발생합니다.
  • PointerPressed- 포인터가 보기 내에서 누름을 시작할 때 발생합니다.
  • PointerReleased은 뷰 내에서 이전에 누름을 시작한 포인터가 해제될 때 발생합니다.

PointerEventArgs 개체는 이벤트와 함께 이벤트에 대한 플랫폼별 인수에 대한 액세스를 제공하는 형식 PlatformPointerEventArgs 의 속성을 정의 PlatformArgs 합니다.

Android에서 클래스는 PlatformPointerEventArgs 다음 속성을 정의합니다.

  • Sender형식 View은 이벤트에 연결된 네이티브 뷰를 나타냅니다.
  • MotionEvent형식 MotionEvent의 경우 뷰에 연결된 네이티브 이벤트 또는 처리기를 나타냅니다.

또한 개체는 PointerEventArgsGetPosition 제스처가 감지되었을 때 포인터의 위치를 나타내는 개체를 반환 Point? 하는 메서드를 정의합니다. 메서드에 대한 GetPosition 자세한 내용은 제스처 위치 가져오기를 참조하세요.

Important

포인터 제스처 인식은 Android, iPadOS, Mac Catalyst 및 Windows에서 지원됩니다.

.NET MAUI는 시각적 상태도 정의합니다 PointerOver . 이 상태는 마우스 커서를 마우스로 가리키고 있지만 누르지 않을 때 보기의 시각적 모양을 변경할 수 있습니다. 자세한 내용은 시각적 상태를 참조 하세요.

PointerGestureRecognizer 만들기

인식 포인터 제스처를 View 만들려면 개체를 PointerGestureRecognizer 만들고, 필요한 이벤트를 처리하고, 보기의 GestureRecognizers 컬렉션에 제스처 인식기를 추가합니다. 또는 개체를 PointerGestureRecognizer 만들고 필요한 명령을 구현에 ICommand 바인딩하고 보기의 컬렉션에 제스처 인식기를 GestureRecognizers 추가합니다.

다음 코드 예제에서는 PointerGestureRecognizerImage. 이벤트를 PointerGestureRecognizer 사용하여 포인터 제스처 검색에 응답합니다.

<Image Source="dotnet_bot.png">
    <Image.GestureRecognizers>
        <PointerGestureRecognizer PointerEntered="OnPointerEntered"
                                  PointerExited="OnPointerExited"
                                  PointerMoved="OnPointerMoved" />
  </Image.GestureRecognizers>
</Image>

이벤트 처리기에 대한 코드를 코드 숨김 파일에 추가해야 합니다.

void OnPointerEntered(object sender, PointerEventArgs e)
{
    // Handle the pointer entered event
}

void OnPointerExited(object sender, PointerEventArgs e)
{
    // Handle the pointer exited event
}

void OnPointerMoved(object sender, PointerEventArgs e)
{
    // Handle the pointer moved event
}

해당하는 C# 코드는 다음과 같습니다.

PointerGestureRecognizer pointerGestureRecognizer = new PointerGestureRecognizer();
pointerGestureRecognizer.PointerEntered += (s, e) =>
{
    // Handle the pointer entered event
};
pointerGestureRecognizer.PointerExited += (s, e) =>
{
    // Handle the pointer exited event
};
pointerGestureRecognizer.PointerMoved += (s, e) =>
{
    // Handle the pointer moved event
};

Image image = new Image();
image.GestureRecognizers.Add(pointerGestureRecognizer);

제스처 위치 가져오기

개체에서 메서드 PointerEventArgs 를 호출하여 포인터 제스처가 GetPosition 발생한 위치를 가져올 수 있습니다. 메서드는 GetPosition 인수를 Element? 수락하고 개체로 Point? 위치를 반환합니다.

void OnPointerExited(object sender, PointerEventArgs e)
{
    // Position inside window
    Point? windowPosition = e.GetPosition(null);

    // Position relative to an Image
    Point? relativeToImagePosition = e.GetPosition(image);

    // Position relative to the container view
    Point? relativeToContainerPosition = e.GetPosition((View)sender);
}

인수는 Element? 위치를 상대적으로 가져와야 하는 요소를 정의합니다. 이 인수로 값을 제공하면 null 메서드가 GetPosition 창 내에서 포인터 제스처의 위치를 정의하는 개체를 반환 Point? 합니다.