RadialController 클래스

정의

휠 입력 장치 또는 Surface Dial과 같은 액세서리를 나타냅니다.

Surface Studio 펜이 있는 Surface Dial.

회전 작업(또는 제스처) 기반의 폼 팩터를 사용하는 Surface Dial은 기본 디바이스의 입력을 보완하는 보조 다중 모달 입력 디바이스로 고안되었습니다. 대부분의 경우에서 주요 손으로 작업을 수행하면서 나머지 손으로 이 디바이스를 조작합니다(예: 펜으로 수동 입력 수행). 즉, 정밀 포인터 입력(예: 터치, 펜 또는 마우스)용으로 고안되지 않았습니다.

또한 Surface Dial은 길게 누르기 작업 및 클릭 작업을 모두 지원합니다. 길게 누르기는 한 가지 기능을 제공합니다. 즉, 명령 메뉴가 표시됩니다. 메뉴가 활성화된 경우 메뉴를 통해 회전 및 클릭 입력이 처리됩니다. 그렇지 않은 경우 처리를 위해 앱에 입력이 전달됩니다.

RadialController 및 관련 API(항목의 끝 참조)를 사용하면 통합 명령 메뉴와 앱에서 지원하는 상호 작용 환경을 모두 사용자 지정할 수 있습니다.

public ref class RadialController sealed
/// [Windows.Foundation.Metadata.ContractVersion(Windows.Foundation.UniversalApiContract, 196608)]
/// [Windows.Foundation.Metadata.MarshalingBehavior(Windows.Foundation.Metadata.MarshalingType.Agile)]
class RadialController final
[Windows.Foundation.Metadata.ContractVersion(typeof(Windows.Foundation.UniversalApiContract), 196608)]
[Windows.Foundation.Metadata.MarshalingBehavior(Windows.Foundation.Metadata.MarshalingType.Agile)]
public sealed class RadialController
Public NotInheritable Class RadialController
상속
Object Platform::Object IInspectable RadialController
특성

Windows 요구 사항

디바이스 패밀리
Windows 10 Anniversary Edition (10.0.14393.0에서 도입되었습니다.)
API contract
Windows.Foundation.UniversalApiContract (v3.0에서 도입되었습니다.)

예제

이 예제에서는 Surface Dial 메뉴에 사용자 지정 도구를 추가하고 RadialController 입력 처리기를 선언합니다.

  1. 먼저 CreateForCurrentView를 호출하여 Surface Dial(myController)에 대한 RadialController 개체에 대한 참조를 만듭니다.
  2. 그런 다음 RadialControllerMenuItem.CreateFromIcon을 호출하여 RadialControllerMenuItem(myItem)의 instance 만듭니다.
  3. 다음으로 메뉴 항목 컬렉션에 해당 항목을 추가합니다.
  4. RadialController 개체에 대한 입력 이벤트 처리기(ButtonClicked 및 RotationChanged)를 선언합니다.
  5. 마지막으로, 이벤트 처리기를 정의합니다.
public sealed partial class MainPage : Page
 {
     RadialController myController;

     public MainPage()
     {
         this.InitializeComponent();
         // Create a reference to the RadialController.
         myController = RadialController.CreateForCurrentView();

         // Create an icon for the custom tool.
         RandomAccessStreamReference icon =
           RandomAccessStreamReference.CreateFromUri(
             new Uri("ms-appx:///Assets/StoreLogo.png"));

         // Create a menu item for the custom tool.
         RadialControllerMenuItem myItem =
           RadialControllerMenuItem.CreateFromIcon("Sample", icon);

         // Add the custom tool to the RadialController menu.
         myController.Menu.Items.Add(myItem);

         // Declare input handlers for the RadialController.
         myController.ButtonClicked += MyController_ButtonClicked;
         myController.RotationChanged += MyController_RotationChanged;
     }

     // Handler for rotation input from the RadialController.
     private void MyController_RotationChanged(RadialController sender,
       RadialControllerRotationChangedEventArgs args)
     {
         if (RotationSlider.Value + args.RotationDeltaInDegrees > 100)
         {
             RotationSlider.Value = 100;
             return;
         }
         else if (RotationSlider.Value + args.RotationDeltaInDegrees < 0)
         {
             RotationSlider.Value = 0;
             return;
         }
         RotationSlider.Value += args.RotationDeltaInDegrees;
     }

     // Handler for click input from the RadialController.
     private void MyController_ButtonClicked(RadialController sender,
       RadialControllerButtonClickedEventArgs args)
     {
         ButtonToggle.IsOn = !ButtonToggle.IsOn;
     }
 }

여기에 표시된 초기화 함수에서는 RadialController 개체에 대한 다양한 입력 이벤트 처리기를 선언합니다.

// Create and configure our radial controller.
private void InitializeController() 
{
    // Create a reference to the RadialController.
    radialController = RadialController.CreateForCurrentView();
    // Set rotation resolution to 1 degree of sensitivity.
    radialController.RotationResolutionInDegrees = 1;

    // Declare input handlers for the RadialController.
    radialController.ButtonClicked += (sender, args) =>
    { RadialController_ButtonClicked(sender, args); };
    radialController.RotationChanged += (sender, args) =>
    { RadialController_RotationChanged(sender, args); };

    radialController.ControlAcquired += (sender, args) =>
    { RadialController_ControlAcquired(sender, args); };
    radialController.ControlLost += (sender, args) =>
    { RadialController_ControlLost(sender, args); };
    radialController.ScreenContactStarted += (sender, args) =>
    { RadialController_ScreenContactStarted(sender, args); };
    radialController.ScreenContactContinued += (sender, args) =>
    { RadialController_ScreenContactContinued(sender, args); };
    radialController.ScreenContactEnded += (sender, args) =>
    { RadialController_ScreenContactEnded(sender, args); };
    AddToLog("Input handlers created");

    // Create the custom menu items.
    CreateMenuItems();
    // Specify the menu items.
    ConfigureMenu();
}

ButtonClicked 처리기에서 상호 작용은 토글 단추의 상태를 선택 또는 선택 취소로 설정합니다.

// Occurs when the wheel device is pressed and then released 
// while a customRadialController tool is active.
// NOTE: Your app does not receive this event when the RadialController 
// menu is active or a built-in tool is active
// Send click input to toggle button of active region.
private void RadialController_ButtonClicked(RadialController sender,
  RadialControllerButtonClickedEventArgs args)
{
    toggles[activeMenuItemIndex].IsOn = !toggles[activeMenuItemIndex].IsOn;
}

RotationChanged 처리기에서 상호 작용은 슬라이더의 값을 수정합니다.

// Occurs when the wheel device is rotated while a custom 
// RadialController tool is active.
// NOTE: Your app does not receive this event when the RadialController 
// menu is active or a built-in tool is active
// Send rotation input to slider of active region.
private void RadialController_RotationChanged(RadialController sender,
  RadialControllerRotationChangedEventArgs args)
{
    Slider slider = sliders[activeMenuItemIndex];
    if (slider.Value + args.RotationDeltaInDegrees > 100)
    {
        slider.Value = 100;
        return;
    }
    else if (slider.Value + args.RotationDeltaInDegrees < 0)
    {
        slider.Value = 0;
        return;
    }
    slider.Value += args.RotationDeltaInDegrees;
    AddToLog("\nRotation: " + sliders[activeMenuItemIndex].Name + " value changed to " + slider.Value);
}

설명

버전 기록

Windows 버전 SDK 버전 추가된 값
1703 15063 ButtonHolding
1703 15063 ButtonPressed
1703 15063 ButtonReleased

속성

Menu

RadialController 개체와 연결된 메뉴에 대한 참조를 가져옵니다.

RotationResolutionInDegrees

RotationChanged 이벤트를 발생하도록 RadialController 개체에 필요한 최소 회전 값을 가져오거나 설정합니다.

UseAutomaticHapticFeedback

RadialController에서 발생한 각 RotationChanged 이벤트에 대해 휠 디바이스에서 촉각 피드백을 사용할 수 있는지 여부를 가져오거나 설정합니다.

메서드

CreateForCurrentView()

휠 디바이스에 대한 RadialController 개체를 인스턴스화하고 활성 애플리케이션에 바인딩합니다.

IsSupported()

시스템에서 휠 디바이스를 지원하는지 여부를 나타내는 값을 검색합니다.

이벤트

ButtonClicked

사용자 지정 RadialController 도구가 활성화된 동안 휠 디바이스를 누른 다음 해제할 때 발생합니다.

다음과 같은 경우 앱에서 이 이벤트를 수신하지 않습니다.

  • RadialController 메뉴가 활성화되어 있습니다.
  • 기본 제공 도구가 활성화되어 있습니다.

참고

시간 임계값을 초과하면 클릭이 길게 누르기 작업이 됩니다. 이 경우 RadialController 개체와 연결된 상황에 맞는 앱 명령의 통합 메뉴가 표시되고 후속 회전 및 클릭 이벤트가 메뉴에서 처리됩니다.

ButtonHolding

사용자가 휠 디바이스를 누르고 누를 때 발생합니다.

ButtonPressed

휠 디바이스를 누를 때 발생합니다.

ButtonReleased

휠 디바이스를 누른 다음 놓을 때 발생합니다.

ControlAcquired

사용자 지정 RadialController 도구(앱에서 정의)를 메뉴에서 선택하거나 사용자 지정 RadialController 도구가 활성화된 동안 RadialController 개체와 연결된 앱을 포그라운드로 가져올 때 발생합니다.

ControlLost

사용자 지정 RadialController 도구(앱에서 정의)가 활성 상태이고 RadialController 개체와 연결된 앱이 백그라운드로 전송되거나 사용자가 RadialController 메뉴를 활성화하는 동안 발생합니다.

RotationChanged

사용자 지정 RadialController 도구가 활성화된 동안 휠 디바이스가 회전될 때 발생합니다.

다음과 같은 경우 앱에서 이 이벤트를 수신하지 않습니다.

  • RadialController 메뉴가 활성화되어 있습니다.
  • 기본 제공 도구가 활성화되어 있습니다.
ScreenContactContinued

디지타이저 표면과 접촉하는 동안 휠 디바이스가 이동되고 사용자 지정 RadialController 도구가 활성화된 경우에만 발생합니다.

다음과 같은 경우 앱에서 이 이벤트를 수신하지 않습니다.

  • RadialController 메뉴가 활성화되어 있습니다.
  • 기본 제공 도구가 활성화되어 있습니다.

기본 길게 누르기 메뉴 환경 외에도 Surface Dial을 Surface Studio 화면에 직접 배치할 수도 있습니다. 이를 통해 특수한 "화면 내부" 메뉴가 제공됩니다.

Surface Dial의 접촉 위치와 경계를 모두 감지하면 시스템에서 디바이스의 폐색을 처리하고 다이얼 바깥쪽을 감싸는 더 큰 버전의 메뉴를 표시할 수 있습니다. 앱에서는 이 동일한 정보를 사용하여 앱에서 디바이스 및 그 예상된 용도, 사용자의 손 및 arm 배치 등의 존재에 대해 UI에 맞게 사용할 수도 있습니다.

이 이벤트는 ScreenContactStarted 이후에 발생하고 ScreenContactEnded에서 중지됩니다.

ScreenContactEnded

디지타이저 표면과 접촉하는 휠 디바이스가 제거되거나 더 이상 검색되지 않고 사용자 지정 RadialController 도구가 활성 상태일 때 발생합니다.

다음과 같은 경우 앱에서 이 이벤트를 수신하지 않습니다.

  • RadialController 메뉴가 활성화되어 있습니다.
  • 기본 제공 도구가 활성화되어 있습니다.

기본 길게 누르기 메뉴 환경 외에도 Surface Dial을 Surface Studio 화면에 직접 배치할 수도 있습니다. 이를 통해 특수한 "화면 내부" 메뉴가 제공됩니다.

Surface Dial의 접촉 위치와 경계를 모두 감지하면 시스템에서 디바이스의 폐색을 처리하고 다이얼 바깥쪽을 감싸는 더 큰 버전의 메뉴를 표시할 수 있습니다. 앱에서는 이 동일한 정보를 사용하여 앱에서 디바이스 및 그 예상된 용도, 사용자의 손 및 arm 배치 등의 존재에 대해 UI에 맞게 사용할 수도 있습니다.

이 이벤트는 ScreenContactStarted 후에 발생합니다.

ScreenContactStarted

휠 장치와 디지타이저 표면 간에 초기 접촉이 감지되고 사용자 지정 RadialController 도구가 활성 상태일 때 발생합니다.

다음과 같은 경우 앱에서 이 이벤트를 수신하지 않습니다.

  • RadialController 메뉴가 활성화되어 있습니다.
  • 기본 제공 도구가 활성화되어 있습니다.

기본 길게 누르기 메뉴 환경 외에도 Surface Dial을 Surface Studio 화면에 직접 배치할 수도 있습니다. 이를 통해 특수한 "화면 내부" 메뉴가 제공됩니다.

Surface Dial의 접촉 위치와 경계를 모두 감지하면 시스템에서 디바이스의 폐색을 처리하고 다이얼 바깥쪽을 감싸는 더 큰 버전의 메뉴를 표시할 수 있습니다. 앱에서는 이 동일한 정보를 사용하여 앱에서 디바이스 및 그 예상된 용도, 사용자의 손 및 arm 배치 등의 존재에 대해 UI에 맞게 사용할 수도 있습니다.

적용 대상

추가 정보