Xamarin での watchOS コンプリケーション
watchOS を使用すると、開発者はウォッチの文字盤用のカスタム コンプリケーションを記述できます
このページでは、使用できるさまざまな種類のコンプリケーションと、watchOS 3 アプリにコンプリケーションを追加する方法について説明します。
各 watchOS アプリケーションには、コンプリケーションが 1 つだけ含まれる可能性があることに注意してください。
まず、Apple のドキュメントを読んで、アプリがコンプリケーションに適しているかどうかを判断します。 5 種類の CLKComplicationFamily
のディスプレイから選択できます。
アプリは、表示されるデータに応じて、1 つのスタイルを実装することも、 5 つすべてを実装することもできます。 また、ユーザーが Digital Crown を回す際に過去や将来の時刻の値を提供する Time Travel をサポートすることもできます。
コンプリケーションの追加
構成
コンプリケーションは、作成時にウォッチ アプリに追加することも、既存のソリューションに手動で追加することもできます。
新しいプロジェクトを追加します...
[新しいプロジェクトの追加...] ウィザードには、コンプリケーション コントローラー クラスを自動的に作成し、Info.plist ファイルを構成するチェックボックスが含まれています。
既存のプロジェクト
既存のプロジェクトにコンプリケーションを追加するには、次の操作を行います。
- 新しい ComplicationController.cs クラス ファイルを作成し、
CLKComplicationDataSource
を実装します。 - アプリの 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
の名前と、サポートするコンプリケーション ファミリを指定する必要があります。
[データ ソース クラス] エントリ一覧には、コンプリケーション ロジックを含む CLKComplicationDataSource
サブクラスをサブクラス化するクラス名が表示されます。
CLKComplicationDataSource
すべてのコンプリケーション機能は単一クラスに実装され、CLKComplicationDataSource
抽象クラス (ICLKComplicationDataSource
インターフェイスを実装します) からメソッドをオーバーライドします。
必須のメソッド
コンプリケーションを実行するには、次のメソッドを実装する必要があります。
GetPlaceholderTemplate
- 構成中、またはアプリが値を指定できない場合に使用される静的表示を返します。GetCurrentTimelineEntry
- コンプリケーションが実行されているときに正しい表示を計算します。GetSupportedTimeTravelDirections
-CLKComplicationTimeTravelDirections
(None
、Forward
、Backward
、Forward | Backward
など) からオプションを返します。
プライバシー
個人データを表示するコンプリケーション
GetPrivacyBehavior
-CLKComplicationPrivacyBehavior.ShowOnLockScreen
またはHideOnLockScreen
このメソッドが HideOnLockScreen
を返す場合、ウォッチがロックされているとコンプリケーションにアイコンまたはアプリケーション名が表示されます (データは表示されません)。
更新プログラム
GetNextRequestedUpdateDate
- オペレーティング システムが次にアプリにコンプリケーションのデータ表示の更新に関するクエリを実行する必要がある時刻を返します。
iOS アプリから強制的に更新することもできます。
Time Travel のサポート
Time Travel のサポートは省略可能で、GetSupportedTimeTravelDirections
メソッドによって制御されます。 Forward
、Backward
、またはForward | Backward
を返す場合、次のメソッドを実装する必要があります
GetTimelineStartDate
GetTimelineEndDate
GetTimelineEntriesBeforeDate
GetTimelineEntriesAfterDate
コンプリケーションの書き込み
コンプリケーションは、単純なデータ表示から、Time Travel でサポートされる複雑なイメージやデータのレンダリングまで多岐に及びます。 以下のコードは、シンプルな単一テンプレートのコンプリケーションを構築する方法を示しています。
サンプル コード
この例では、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 - その周りに進行状況リングが付いた 1 行のテキストを表示します。
- SimpleImage - 小さな単一イメージのみを表示します。
- SimpleText - テキストの小さなスニペットのみを表示します。
- StackImage - イメージと 1 行のテキストが上下に並んで表示されます
- StackText - 2 行のテキストを表示します。
モジュラー - 小
これらのテンプレート クラス名には、すべて CLKComplicationTemplateModularSmall
がプレフィックスとして付いています。
- ColumnsText - テキスト値の小さなグリッド (2 行 2 列) を表示します。
- RingImage - その周りに進行状況リングが付いた単一イメージを表示します。
- RingText - その周りに進行状況リングが付いた 1 行のテキストを表示します。
- SimpleImage - 小さな単一イメージのみを表示します。
- SimpleText - テキストの小さなスニペットのみを表示します。
- StackImage - イメージと 1 行のテキストが上下に並んで表示されます
- StackText - 2 行のテキストを表示します。
モジュラー - 大
これらのテンプレート クラス名には、すべて CLKComplicationTemplateModularLarge
がプレフィックスとして付いています。
- Columns - 3 x 2 のグリッドを表示します。必要に応じて、各行の左側にイメージを含めます。
- StandardBody - 2 行のプレーン テキストを含む太字のヘッダー文字列を表示します。 ヘッダーは、必要に応じて左側にイメージを表示できます。
- Table - 太字のヘッダー文字列を表示し、その下に 2 x 2 のテキスト グリッドを表示します。 ヘッダーは、必要に応じて左側にイメージを表示できます。
- TallBody - 太字のヘッダー文字列を表示し、その下に大きいフォントの 1 行のテキストを表示します。
Utilitarian - 小
これらのテンプレート クラス名には、すべて CLKComplicationTemplateUtilitarianSmall
がプレフィックスとして付いています。
- Flat - イメージとテキストを 1 行に表示します (テキストは短くする必要があります)。
- RingImage - その周りに進行状況リングが付いた単一イメージを表示します。
- RingText - その周りに進行状況リングが付いた 1 行のテキストを表示します。
- Square - 正方形の画像 (38 mm または 42 mm Apple Watch の場合は 40 ピクセル四方または 44 ピクセル四方の正方形) を表示します。
Utilitarian - 大
このコンプリケーション スタイルのテンプレートは 1 つだけです: CLKComplicationTemplateUtilitarianLargeFlat
。
単一イメージとテキストがすべて 1 行に表示されます。