다음을 통해 공유


Xamarin의 watchOS 합병증

watchOS를 사용하면 개발자가 시계 얼굴에 대한 사용자 지정 합병증을 작성할 수 있습니다.

이 페이지에서는 사용 가능한 다양한 유형의 합병증과 watchOS 3 앱에 합병증을 추가하는 방법을 설명합니다.

각 watchOS 애플리케이션에는 하나의 복잡성만 있을 수 있습니다.

먼저 Apple의 문서를 읽어 앱이 합병증에 적합한지 확인합니다. 다음 중에서 선택할 수 있는 5 CLKComplicationFamily 가지 유형의 디스플레이가 있습니다.

The 5 CLKComplicationFamily types available: Circular Small, Modular Small, Modular Large, Utilitarian Small, Utilitarian Large

앱은 표시되는 데이터에 따라 하나의 스타일 또는 5개 모두를 구현할 수 있습니다. 사용자가 디지털 크라운을 돌리면 과거 및/또는 미래의 시간에 대한 값을 제공하는 시간 여행을 지원할 수도 있습니다.

합병증 추가

구성

복잡성을 만드는 동안 조사식 앱에 추가하거나 기존 솔루션에 수동으로 추가할 수 있습니다.

새 프로젝트 추가...

새 프로젝트 추가... 마법사에는 자동으로 복잡성 컨트롤러 클래스를 만들고 Info.plist 파일을 구성하는 검사box가 포함되어 있습니다.

The Include Complication checkbox

기존 프로젝트

기존 프로젝트에 복잡성을 추가하려면 다음을 수행합니다.

  1. ComplicationController.cs 클래스 파일을 만들고 구현 CLKComplicationDataSource합니다.
  2. 합병증을 노출하도록 앱의 Info.plist 와 지원되는 합병증 패밀리의 ID를 구성합니다.

이러한 단계는 아래에 자세히 설명되어 있습니다.

CLKComplicationDataSource 클래스

다음 C# 템플릿에는 을 구현하는 데 필요한 최소 메서드가 포함되어 있습니다 CLKComplicationDataSource.

[Register ("ComplicationController")]
public class ComplicationController : CLKComplicationDataSource
{
  public ComplicationController ()
  {
  }
  public override void GetPlaceholderTemplate (CLKComplication complication, Action<CLKComplicationTemplate> handler)
  {
  }
  public override void GetCurrentTimelineEntry (CLKComplication complication, Action<CLKComplicationTimelineEntry> handler)
  {
  }
  public override void GetSupportedTimeTravelDirections (CLKComplication complication, Action<CLKComplicationTimeTravelDirections> handler)
  {
  }
}

이 클래스에 코드를 추가하려면 복잡성 지침을 작성합니다.

Info.plist

조사식 확장 프로그램의 Info.plist 파일은 지원하려는 합병증 패밀리의 CLKComplicationDataSource 이름과 다음을 지정해야 합니다.

The complication family types

데이터 원본 클래스 항목 목록에는 복잡성 논리를 포함하는 서브클래스 하위 클래스 CLKComplicationDataSource 의 클래스 이름이 표시됩니다.

CLKComplicationDataSource

모든 복잡성 기능은 단일 클래스에서 구현되어 추상 클래스(인터페이스를 구현하는)의 CLKComplicationDataSource 메서드를 재정의 ICLKComplicationDataSource 합니다.

필수 메서드

복잡성을 실행하려면 다음 메서드를 구현해야 합니다.

  • GetPlaceholderTemplate - 구성 중 또는 앱에서 값을 제공할 수 없는 경우에 사용되는 정적 디스플레이를 반환합니다.
  • GetCurrentTimelineEntry - 합병증이 실행 중일 때 올바른 디스플레이를 계산합니다.
  • GetSupportedTimeTravelDirections- , BackwardForward또는 Forward | Backward.와 같은 None옵션을 CLKComplicationTimeTravelDirections 반환합니다.

개인 정보 보호

개인 데이터를 표시하는 복잡성

  • GetPrivacyBehavior - CLKComplicationPrivacyBehavior.ShowOnLockScreen 또는 HideOnLockScreen

이 메서드가 반환 HideOnLockScreen 되면 시계가 잠겨 있을 때 아이콘이나 응용 프로그램 이름(데이터가 아님)이 표시됩니다.

업데이트

  • GetNextRequestedUpdateDate - 운영 체제에서 업데이트된 복잡성 표시 데이터를 앱에 쿼리해야 하는 시간을 반환합니다.

iOS 앱에서 강제로 업데이트할 수도 있습니다.

시간 여행 지원

시간 이동 지원은 선택 사항이며 메서드에 GetSupportedTimeTravelDirections 의해 제어됩니다. 반환 ForwardBackwardForward | Backward 하거나 다음 메서드를 구현해야 하는 경우

  • GetTimelineStartDate
  • GetTimelineEndDate
  • GetTimelineEntriesBeforeDate
  • GetTimelineEntriesAfterDate

합병증 작성

복잡성은 간단한 데이터 표시부터 시간 이동 지원을 통해 복잡한 이미지 및 데이터 렌더링에 이르기까지 다양합니다. 아래 코드는 간단한 단일 템플릿 복잡성을 빌드하는 방법을 보여줍니다.

예제 코드

이 예제에서는 UtilitarianLarge 템플릿만 지원하므로 해당 유형의 합병증을 지원하는 특정 시계 얼굴에서만 선택할 수 있습니다. 시계에서 합병증을 선택하면 내 합병증이 표시되고 실행텍스트 시간(시간의 일부 포함)이 표시됩니다.

[Register ("ComplicationController")]
public class ComplicationController : CLKComplicationDataSource
{
    public ComplicationController ()
    {
    }
    public ComplicationController (IntPtr p) : base (p)
    {
    }
    public override void GetCurrentTimelineEntry (CLKComplication complication, Action<CLKComplicationTimelineEntry> handler)
    {
        CLKComplicationTimelineEntry entry = null;
    var complicationDisplay = "MINUTE " + DateTime.Now.Minute.ToString(); // text to display on watch face
        if (complication.Family == CLKComplicationFamily.UtilitarianLarge)
        {
            var textTemplate = new CLKComplicationTemplateUtilitarianLargeFlat();
            textTemplate.TextProvider = CLKSimpleTextProvider.FromText(complicationDisplay); // dynamic display
            entry = CLKComplicationTimelineEntry.Create(NSDate.Now, textTemplate);
        } else {
            Console.WriteLine("Complication family timeline not supported (" + complication.Family + ")");
        }
        handler (entry);
    }
    public override void GetPlaceholderTemplate (CLKComplication complication, Action<CLKComplicationTemplate> handler)
    {
        CLKComplicationTemplate template = null;
        if (complication.Family == CLKComplicationFamily.UtilitarianLarge) {
            var textTemplate = new CLKComplicationTemplateUtilitarianLargeFlat ();
            textTemplate.TextProvider = CLKSimpleTextProvider.FromText ("MY COMPLICATION"); // static display
            template = textTemplate;
        } else {
            Console.WriteLine ("Complication family placeholder not not supported (" + complication.Family + ")");
        }
        handler (template);
    }
    public override void GetSupportedTimeTravelDirections (CLKComplication complication, Action<CLKComplicationTimeTravelDirections> handler)
    {
        handler (CLKComplicationTimeTravelDirections.None);
    }
}

합병증 템플릿

각 합병증 스타일에 사용할 수 있는 다양한 템플릿이 있습니다. 템플릿을 사용하면 진행률 또는 다른 값을 그래픽으로 표시하는 데 사용할 수 있는 복잡성 주위에 진행률 스타일 링을 표시할 수 있습니다.

Apple의 CLKComplicationTemplate 문서

원형 작게

이러한 템플릿 클래스 이름 앞에는 모두 다음 접두사로 CLKComplicationTemplateCircularSmall지정됩니다.

  • RingImage - 진행률 링이 있는 단일 이미지를 표시합니다.
  • RingText - 한 줄의 텍스트를 표시하고 그 주위에 진행률 링을 표시합니다.
  • SimpleImage - 작은 단일 이미지만 표시합니다.
  • SimpleText - 작은 텍스트 조각을 표시하기만 하면됩니다.
  • StackImage - 이미지와 텍스트 줄을 표시합니다.
  • StackText - 두 줄의 텍스트를 표시합니다.

모듈식 Small

이러한 템플릿 클래스 이름 앞에는 모두 다음 접두사로 CLKComplicationTemplateModularSmall지정됩니다.

  • ColumnsText - 텍스트 값의 작은 눈금(행 2개와 열 2개)을 표시합니다.
  • RingImage - 진행률 링이 있는 단일 이미지를 표시합니다.
  • RingText - 한 줄의 텍스트를 표시하고 그 주위에 진행률 링을 표시합니다.
  • SimpleImage - 작은 단일 이미지만 표시합니다.
  • SimpleText - 작은 텍스트 조각을 표시하기만 하면됩니다.
  • StackImage - 이미지와 텍스트 줄을 표시합니다.
  • StackText - 두 줄의 텍스트를 표시합니다.

모듈식 큰

이러한 템플릿 클래스 이름 앞에는 모두 다음 접두사로 CLKComplicationTemplateModularLarge지정됩니다.

  • 열 - 필요에 따라 각 행의 왼쪽에 이미지를 포함하여 2개의 열이 있는 3개의 행 그리드를 표시합니다.
  • StandardBody - 일반 텍스트의 두 행이 있는 굵은 머리글 문자열을 표시합니다. 헤더는 필요에 따라 왼쪽에 이미지를 표시할 수 있습니다.
  • - 굵은 머리글 문자열을 표시하고 그 아래에 2x2 눈금의 텍스트를 표시합니다. 헤더는 필요에 따라 왼쪽에 이미지를 표시할 수 있습니다.
  • TallBody - 굵은 머리글 문자열을 표시하고 그 아래에 더 큰 글꼴 한 줄의 텍스트를 표시합니다.

실용적 소형

이러한 템플릿 클래스 이름 앞에는 모두 다음 접두사로 CLKComplicationTemplateUtilitarianSmall지정됩니다.

  • 플랫 - 이미지와 일부 텍스트를 한 줄에 표시합니다(텍스트는 짧아야 합니다).
  • RingImage - 진행률 링이 있는 단일 이미지를 표시합니다.
  • RingText - 한 줄의 텍스트를 표시하고 그 주위에 진행률 링을 표시합니다.
  • 정사각형 - 정사각형 이미지(각각 38mm 또는 42mm Apple Watch의 경우 40px 또는 44px 정사각형)를 표시합니다.

실용성 큰

이 복잡성 스타일에 대한 템플릿은 하나뿐입니다 CLKComplicationTemplateUtilitarianLargeFlat. 단일 이미지와 일부 텍스트가 모두 한 줄에 표시됩니다.