watchOS Complicazioni in Xamarin
watchOS consente agli sviluppatori di scrivere complicazioni personalizzate per guardare i visi
Questa pagina illustra i diversi tipi di complicazioni disponibili e come aggiungere una complicazione all'app watchOS 3.
Si noti che ogni applicazione watchOS può avere una sola complicazione.
Per iniziare, leggere la documentazione di Apple per determinare se l'app è adatta a una complicazione. Esistono 5 CLKComplicationFamily
tipi di visualizzazione tra cui scegliere:
Le app possono implementare solo uno stile o tutti e cinque, a seconda dei dati visualizzati. Puoi anche supportare Il viaggio temporale, fornendo valori per i tempi passati e/o futuri quando l'utente trasforma la Corona Digitale.
Aggiunta di una complicazione
Impostazione
Le complicazioni possono essere aggiunte a un'app watch durante la creazione o aggiunte manualmente a una soluzione esistente.
Aggiungi nuovo progetto...
La procedura guidata Aggiungi nuovo progetto include una casella di controllo che creerà automaticamente una classe controller di complicazione e configurerà il file Info.plist :
Progetti esistenti
Per aggiungere una complicazione a un progetto esistente:
- Creare un nuovo file di classe ComplicationController.cs e implementare
CLKComplicationDataSource
. - Configurare info.plist dell'app per esporre la complicazione e l'identità supportate dalle famiglie di complicazioni.
Questi passaggi sono descritti in modo più dettagliato di seguito.
Classe CLKComplicationDataSource
Il modello C# seguente include i metodi minimi necessari per implementare un oggetto 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)
{
}
}
Seguire le istruzioni per la scrittura di complicazioni per aggiungere codice a questa classe.
Info.plist
Il file Info.plist dell'estensione watch deve specificare il nome delle famiglie di CLKComplicationDataSource
complicazioni che si desidera supportare:
L'elenco voci Classe origine dati mostrerà i nomi di classe che sottoclasse CLKComplicationDataSource
che includono la logica di complicazione.
CLKComplicationDataSource
Tutte le funzionalità di complicazione vengono implementate in una singola classe, sostituendo i metodi della CLKComplicationDataSource
classe astratta (che implementa l'interfaccia ICLKComplicationDataSource
).
Metodi obbligatori
Per eseguire la complicazione, è necessario implementare i metodi seguenti:
GetPlaceholderTemplate
- Restituisce la visualizzazione statica usata durante la configurazione o quando l'app non può fornire un valore.GetCurrentTimelineEntry
- Calcolare la visualizzazione corretta quando è in esecuzione la complicazione.GetSupportedTimeTravelDirections
- Restituisce opzioni daCLKComplicationTimeTravelDirections
, ad esempioNone
,Forward
Backward
, oForward | Backward
.
Riservatezza
Complicazioni che visualizzano dati personali
GetPrivacyBehavior
-CLKComplicationPrivacyBehavior.ShowOnLockScreen
oppureHideOnLockScreen
Se questo metodo restituisce HideOnLockScreen
, la complicazione mostrerà un'icona o il nome dell'applicazione (e non dati) quando l'orologio è bloccato.
Aggiornamenti
GetNextRequestedUpdateDate
- Restituisce un'ora in cui il sistema operativo deve eseguire una query successiva sull'app per i dati di visualizzazione delle complicazioni aggiornati.
È anche possibile forzare un aggiornamento dall'app iOS.
Supporto del tempo di viaggio
Il supporto per viaggi temporali è facoltativo e controllato dal GetSupportedTimeTravelDirections
metodo . Se restituisce Forward
, Backward
o Forward | Backward
è necessario implementare i metodi seguenti
GetTimelineStartDate
GetTimelineEndDate
GetTimelineEntriesBeforeDate
GetTimelineEntriesAfterDate
Scrittura di una complicazione
Le complicazioni variano dalla visualizzazione di dati semplici al rendering complesso di immagini e dati con il supporto di Viaggi temporali. Il codice seguente illustra come creare una semplice complicazione a modello singolo.
Codice di esempio
Questo esempio supporta solo il UtilitarianLarge
modello, quindi può essere selezionato solo su visi orologio specifici che supportano tale tipo di complicazione. Quando si selezionano complicazioni su un orologio, viene visualizzato MY COMPLICATION e quando viene eseguito visualizza l'ora minuto di testo (con una parte del tempo).
[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);
}
}
Modelli di complicazione
Esistono diversi modelli disponibili per ogni stile di complicazione. I modelli ring consentono di visualizzare un anello di stato intorno alla complicazione, che può essere usato per visualizzare lo stato di avanzamento o un altro valore graficamente.
Documentazione CLKComplicationTemplate di Apple
Circolare piccola
Questi nomi di classe modello sono tutti preceduti da CLKComplicationTemplateCircularSmall
:
- RingImage : visualizza una singola immagine, con un anello di stato intorno a esso.
- RingText : visualizza una singola riga di testo, con un anello di stato intorno a esso.
- SimpleImage : consente di visualizzare solo una piccola immagine.
- SimpleText : visualizza solo un piccolo frammento di testo.
- StackImage - Visualizzare un'immagine e una riga di testo, una sopra l'altra
- StackText : consente di visualizzare due righe di testo.
Modular Small
Questi nomi di classe modello sono tutti preceduti da CLKComplicationTemplateModularSmall
:
- ColumnsText : consente di visualizzare una piccola griglia di valori di testo (2 righe e 2 colonne).
- RingImage : visualizza una singola immagine, con un anello di stato intorno a esso.
- RingText : visualizza una singola riga di testo, con un anello di stato intorno a esso.
- SimpleImage : consente di visualizzare solo una piccola immagine.
- SimpleText : visualizza solo un piccolo frammento di testo.
- StackImage - Visualizzare un'immagine e una riga di testo, una sopra l'altra
- StackText : consente di visualizzare due righe di testo.
Modular Large
Questi nomi di classe modello sono tutti preceduti da CLKComplicationTemplateModularLarge
:
- Colonne : consente di visualizzare una griglia di 3 righe con 2 colonne, inclusa facoltativamente un'immagine a sinistra di ogni riga.
- StandardBody : consente di visualizzare una stringa di intestazione in grassetto con due righe di testo normale. L'intestazione può facoltativamente visualizzare un'immagine a sinistra.
- Tabella : visualizza una stringa di intestazione in grassetto, con una griglia di testo 2x2 sotto di essa. L'intestazione può facoltativamente visualizzare un'immagine a sinistra.
- TallBody : visualizza una stringa di intestazione in grassetto, con una singola riga di testo più grande sotto.
Utilitarian Small
Questi nomi di classe modello sono tutti preceduti da CLKComplicationTemplateUtilitarianSmall
:
- Flat : visualizza un'immagine e un testo su una singola riga (il testo deve essere breve).
- RingImage : visualizza una singola immagine, con un anello di stato intorno a esso.
- RingText : visualizza una singola riga di testo, con un anello di stato intorno a esso.
- Quadrato : visualizzare un'immagine quadrata (rispettivamente 40 px o 44 pixel per Apple Watch da 38 mm o 42 mm).
Utilitarian Large
Esiste un solo modello per questo stile di complicazione: CLKComplicationTemplateUtilitarianLargeFlat
.
Visualizza una singola immagine e un testo, tutti su una singola riga.