Xamarin の watchOS 画像コントロール

watchOS には、画像とシンプルなアニメーションを表示する WKInterfaceImage コントロールが用意されています。 一部のコントロールには、背景画像 (ボタン、グループ、インターフェイス コントローラーなど) を含めることもできます。

写真を表示している Apple Watch 単純なアニメーションを使用した Apple Watch

アセット カタログの画像を使用して、Watch Kit アプリに画像を追加します。 すべてのウォッチ デバイスに Retina ディスプレイが搭載されているので、@2x バージョンのみ必要です。

すべてのウォッチ デバイスに Retina ディスプレイが搭載されているので、2x バージョンのみ必要である

画像自体がウォッチ ディスプレイに適したサイズであることを保証することをお勧めします。 誤ったサイズの画像 (特に大きい画像) を使用し、拡大縮小してウォッチに表示 "しないようにします"。

アセット カタログの画像で Watch Kit のサイズ (38mm と 42mm) を使用して、表示サイズごとに異なる画像を指定できます。

アセット カタログの画像で Watch Kit のサイズ (38mm と 42mm) を使用して、表示サイズごとに異なる画像を指定できる

ウォッチ上の画像

画像を表示する最も効率的な方法は、"ウォッチ アプリ プロジェクトに含め"、SetImage(string imageName) メソッドを使用して表示する方法です。

たとえば、サンプルには、ウォッチ アプリ プロジェクトのアセット カタログに追加された画像が数多くあります。

WatchKitCatalog サンプルには、ウォッチ アプリ プロジェクトのアセット カタログに追加された画像が数多くある

これらは、文字列名パラメーターを指定した SetImage を使用して、効率的に読み込み、ウォッチに表示できます。

myImageControl.SetImage("Whale");
myOtherImageControl.SetImage("Worry");

背景画像

同じロジックが、ButtonGroup、および InterfaceController クラスの SetBackgroundImage (string imageName) に適用されます。 最適なパフォーマンスを実現するには、画像をウォッチ アプリ自体に格納します。

ウォッチ拡張機能の画像

ウォッチ アプリ自体に格納されている画像を読み込むだけでなく、拡張機能バンドルからウォッチ アプリに画像を送信して表示することもできます (または、リモートの場所から画像をダウンロードして表示することもできます)。

ウォッチ拡張機能から画像を読み込むには、UIImage インスタンスを作成し、UIImage オブジェクトを使用して SetImage を呼び出します。

たとえば、サンプルには、ウォッチ拡張機能プロジェクトの Bumblebee という名前の画像があります。

WatchKitCatalog サンプルに、ウォッチ拡張機能プロジェクトの Bumblebee という名前の画像がある

次のコードを実行すると、

  • 画像がメモリに読み込まれ
  • ウォッチに表示されます。
using (var image = UIImage.FromBundle ("Bumblebee")) {
    myImageControl.SetImage (image);
}

Animations

一連の画像をアニメーション化するには、すべてが、同じプレフィックスで始まり、数値サフィックスが付いている必要があります。

サンプルには、ウォッチ アプリ プロジェクトに Bus プレフィックスが付く一連の番号付き画像が含まれています。

WatchKitCatalog サンプルには、ウォッチ アプリ プロジェクトに Bus プレフィックスが付く一連の番号付き画像が含まれている

これらの画像をアニメーションとして表示するには、最初に、このプレフィックス名を指定した SetImage を使用して画像を読み込み、次に、StartAnimating を呼び出します。

animatedImage.SetImage ("Bus");
animatedImage.StartAnimating ();

画像コントロールで StopAnimating を呼び出して、アニメーションのループを停止します。

animatedImage.StopAnimating ();

付録: 画像のキャッシュ (watchOS 1)

重要

watchOS 3 アプリは、デバイス上ですべて実行されます。 次の情報は watchOS 1 アプリのみが対象です。

アプリケーションが拡張機能に格納されている (またはダウンロードされている) 画像を繰り返し使用する場合は、画像をウォッチのストレージにキャッシュして、その後の表示のパフォーマンスを向上させることができます。

WKInterfaceDeviceAddCachedImage メソッドを使用して画像をウォッチに転送して、画像名パラメーターを文字列として指定した SetImage を使用して表示します。

var device = WKInterfaceDevice.CurrentDevice;
using (var image = UIImage.FromBundle ("Bumblebee")) {
    if (!device.AddCachedImage (image, "Bumblebee")) {
            Console.WriteLine ("Image cache full.");
        } else {
            cachedImage.SetImage ("Bumblebee");
        }
    }
}

WKInterfaceDevice.CurrentDevice.WeakCachedImages を使用して、コード内の画像キャッシュの内容に対してクエリを実行できます。

キャッシュの管理

キャッシュのサイズは約 20 MB です。 これはアプリを再起動しても保持されるので、いっぱいになった時点で、WKInterfaceDevice.CurrentDevice オブジェクトの RemoveCachedImage または RemoveAllCachedImages メソッドを使用してファイルを消去する必要があります。