komplikacje systemu watchOS na platformie Xamarin

watchOS umożliwia deweloperom pisanie niestandardowych komplikacji dla twarzy zegarków

Na tej stronie wyjaśniono różne dostępne rodzaje komplikacji oraz sposób dodawania komplikacji do aplikacji systemu watchOS 3.

Należy pamiętać, że każda aplikacja systemu watchOS może mieć tylko jedną komplikację.

Zacznij od przeczytania dokumentacji firmy Apple, aby ustalić, czy aplikacja jest odpowiednia dla komplikacji. Istnieje 5 CLKComplicationFamily typów wyświetlania do wyboru:

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

Aplikacje mogą implementować tylko jeden styl lub wszystkie pięć w zależności od wyświetlanych danych. Możesz również obsługiwać funkcję Time Travel, podając wartości dla poprzednich i/lub przyszłych czasów, gdy użytkownik zmieni koronę cyfrową.

Dodawanie komplikacji

Konfigurowanie

Komplikacje można dodać do aplikacji do zegarka podczas tworzenia lub ręcznie dodać do istniejącego rozwiązania.

Dodaj nowy projekt...

Kreator Dodaj nowy projekt zawiera pole wyboru, które spowoduje automatyczne utworzenie klasy kontrolera komplikacji i skonfigurowanie pliku Info.plist :

The Include Complication checkbox

Istniejące projekty

Aby dodać komplikację do istniejącego projektu:

  1. Utwórz nowy plik klasy ComplicationController.cs i zaimplementuj plik CLKComplicationDataSource.
  2. Skonfiguruj aplikację Info.plist , aby uwidocznić komplikacje i tożsamość, które rodziny powikłań są obsługiwane.

Te kroki zostały opisane bardziej szczegółowo poniżej.

Klasa CLKComplicationDataSource

Poniższy szablon języka C# zawiera minimalną wymaganą metodę implementowania elementu 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)
  {
  }
}

Postępuj zgodnie z instrukcjami dotyczącymi komplikacji , aby dodać kod do tej klasy.

Info.plist

Plik Info.plist rozszerzenia zegarka powinien określać nazwę CLKComplicationDataSource i które rodziny komplikacji chcesz wspierać:

The complication family types

Lista pozycji Klasa źródła danych będzie zawierać nazwy klas, które podklasy CLKComplicationDataSource , która obejmuje logikę komplikacji.

CLKComplicationDataSource

Wszystkie funkcje komplikacji są implementowane w jednej klasie, przesłaniając metody z CLKComplicationDataSource klasy abstrakcyjnej (która implementuje ICLKComplicationDataSource interfejs).

Wymagane metody

Aby można było uruchomić komplikację, należy zaimplementować następujące metody:

  • GetPlaceholderTemplate — Zwraca statyczny ekran używany podczas konfiguracji lub gdy aplikacja nie może podać wartości.
  • GetCurrentTimelineEntry - Oblicz prawidłowy wyświetlacz, gdy komplikacja jest uruchomiona.
  • GetSupportedTimeTravelDirections - Zwraca opcje z CLKComplicationTimeTravelDirections takich jak None, Forward, , Backwardlub Forward | Backward.

Prywatność

Komplikacje, które wyświetlają dane osobowe

  • GetPrivacyBehavior - CLKComplicationPrivacyBehavior.ShowOnLockScreen lub HideOnLockScreen

Jeśli ta metoda zwróci HideOnLockScreen , komplikacja będzie wyświetlać ikonę lub nazwę aplikacji (a nie żadne dane), gdy zegarek jest zablokowany.

Aktualizacje

  • GetNextRequestedUpdateDate — Zwróć czas, kiedy system operacyjny powinien następnie wysłać zapytanie do aplikacji w celu uzyskania zaktualizowanych danych wyświetlania komplikacji.

Możesz również wymusić aktualizację z poziomu aplikacji systemu iOS.

Obsługa podróży w czasie

Obsługa podróży czasowych jest opcjonalna i kontrolowana przez metodę GetSupportedTimeTravelDirections . Jeśli zwraca wartość Forward, Backwardlub Forward | Backward należy zaimplementować następujące metody

  • GetTimelineStartDate
  • GetTimelineEndDate
  • GetTimelineEntriesBeforeDate
  • GetTimelineEntriesAfterDate

Pisanie komplikacji

Komplikacje wahają się od prostego wyświetlania danych do skomplikowanego renderowania obrazów i danych dzięki obsłudze usługi Time Travel. Poniższy kod pokazuje, jak utworzyć proste, jedno szablonowe komplikacje.

Przykładowy kod

Ten przykład obsługuje UtilitarianLarge tylko szablon, więc można go wybrać tylko na określonych twarzach zegarków, które obsługują ten typ komplikacji. Podczas wybierania komplikacji w zegarku jest wyświetlany komunikat MY COMPLICATION i podczas uruchamiania wyświetla tekst MINUTa godziny (z częścią czasu).

[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);
    }
}

Szablony komplikacji

Istnieje wiele różnych szablonów dostępnych dla każdego stylu komplikacji. Szablony pierścieniowe umożliwiają wyświetlenie pierścienia w stylu postępu wokół komplikacji, które mogą służyć do wyświetlania postępu lub innej wartości graficznie.

Dokumentacja CLKComplicationTemplate firmy Apple

Mały okrągły

Te nazwy klas szablonu są poprzedzone prefiksem CLKComplicationTemplateCircularSmall:

  • RingImage — wyświetla pojedynczy obraz z pierścieniem postępu wokół niego.
  • RingText — wyświetla pojedynczy wiersz tekstu z pierścieniem postępu wokół niego.
  • SimpleImage — wystarczy wyświetlić mały pojedynczy obraz.
  • SimpleText — wystarczy wyświetlić mały fragment tekstu.
  • StackImage — wyświetlanie obrazu i wiersza tekstu, jeden nad drugim
  • StackText — wyświetla dwa wiersze tekstu.

Modułowy mały rozmiar

Te nazwy klas szablonu są poprzedzone prefiksem CLKComplicationTemplateModularSmall:

  • ColumnsText — wyświetla małą siatkę wartości tekstowych (2 wiersze i 2 kolumny).
  • RingImage — wyświetla pojedynczy obraz z pierścieniem postępu wokół niego.
  • RingText — wyświetla pojedynczy wiersz tekstu z pierścieniem postępu wokół niego.
  • SimpleImage — wystarczy wyświetlić mały pojedynczy obraz.
  • SimpleText — wystarczy wyświetlić mały fragment tekstu.
  • StackImage — wyświetlanie obrazu i wiersza tekstu, jeden nad drugim
  • StackText — wyświetla dwa wiersze tekstu.

Duży moduł

Te nazwy klas szablonu są poprzedzone prefiksem CLKComplicationTemplateModularLarge:

  • Kolumny — wyświetla siatkę zawierającą 3 wiersze z 2 kolumnami, opcjonalnie łącznie z obrazem po lewej stronie każdego wiersza.
  • StandardBody — wyświetla pogrubiony ciąg nagłówka z dwoma wierszami zwykłego tekstu. Nagłówek może opcjonalnie wyświetlić obraz po lewej stronie.
  • Tabela — wyświetl pogrubiony ciąg nagłówka z 2x2 siatką tekstu poniżej. Nagłówek może opcjonalnie wyświetlić obraz po lewej stronie.
  • TallBody — wyświetl pogrubiony ciąg nagłówka z większą czcionką z pojedynczym wierszem tekstu poniżej.

Mały narzędziowy

Te nazwy klas szablonu są poprzedzone prefiksem CLKComplicationTemplateUtilitarianSmall:

  • Flat — wyświetla obraz i tekst w jednym wierszu (tekst powinien być krótki).
  • RingImage — wyświetla pojedynczy obraz z pierścieniem postępu wokół niego.
  • RingText — wyświetla pojedynczy wiersz tekstu z pierścieniem postępu wokół niego.
  • Kwadrat — wyświetla obraz kwadratowy (odpowiednio 40 pikseli lub 44px kwadrat dla zegarka Apple Watch 38mm lub 42mm).

Duże narzędzia

Ten styl komplikacji ma tylko jeden szablon: CLKComplicationTemplateUtilitarianLargeFlat. Wyświetla on pojedynczy obraz i tekst— wszystko w jednym wierszu.