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:
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 :
Istniejące projekty
Aby dodać komplikację do istniejącego projektu:
- Utwórz nowy plik klasy ComplicationController.cs i zaimplementuj plik
CLKComplicationDataSource
. - 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ć:
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 zCLKComplicationTimeTravelDirections
takich jakNone
,Forward
, ,Backward
lubForward | Backward
.
Prywatność
Komplikacje, które wyświetlają dane osobowe
GetPrivacyBehavior
-CLKComplicationPrivacyBehavior.ShowOnLockScreen
lubHideOnLockScreen
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
, Backward
lub 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.