Xamarin 中的 watchOS 图像控件

watchOS 提供 WKInterfaceImage 控件来显示图像和简单的动画。 某些控件还可以具有背景图像(如按钮、组和接口控制器)。

显示图片的 Apple Watch 带有简单动画的 Apple Watch

使用资产目录图像将图像添加到 Watch Kit 应用。 只有 @2x 版本必需执行此操作,因为所有 Watch 设备都配有 Retina 显示屏。

只有 2x 版本必需执行此操作,因为所有 Watch 设备都配有 Retina 显示屏

最好确保图像本身适合 Watch 显示屏的大小。 避免使用大小不正确的图像(尤其是大图像)和通过缩放在 Watch 上显示它们。

可以使用资产目录图像中的 Watch Kit 大小(38mm 和 42mm)为每个显示大小指定不同的图像。

可以使用资产目录图像中的 Watch Kit 大小(38mm 和 42mm)为每个显示大小指定不同的图像

Watch 上的图像

显示图像的最有效方法是将其包含在 Watch 应用项目中,并使用 SetImage(string imageName) 方法显示它们。

例如,示例将大量图像添加到了 Watch 应用项目的资产目录中:

WatchKitCatalog 示例将大量图像添加到了 Watch 应用项目的资产目录中

可以使用 SetImage 和字符串名称参数在 Watch 上高效加载和显示这些值:

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

背景图像

相同的逻辑适用于 ButtonGroupInterfaceController 类上的 SetBackgroundImage (string imageName)。 将图像存储在 Watch 应用本地可实现最佳性能。

Watch 扩展中的图像

除了加载存储在 Watch 应用本地的图像之外,还可以将扩展捆绑包中的图像发送到 Watch 应用进行显示(也可以从远程位置下载图像,然后显示这些图像)。

若要从 Watch 扩展加载图像,请创建 UIImage 实例,然后使用 UIImage 对象调用 SetImage

例如,示例在 Watch 扩展项目中有一个名为 Bumblebee 的图像

WatchKitCatalog 示例在 Watch 扩展项目中有一个名为 Bumblebee 的图像

以下代码将实现:

  • 将图像加载到内存中,然后
  • 显示在 Watch 上。
using (var image = UIImage.FromBundle ("Bumblebee")) {
    myImageControl.SetImage (image);
}

动画

若要对一组图像进行动画处理,它们应以相同的前缀开头,并具有数字后缀。

该示例在 Watch 应用项目中包含一系列带有 Bus 前缀的编号图像

WatchKitCatalog 示例在 Watch 应用项目中包含一系列带有 Bus 前缀的编号图像

若要将这些图像显示为动画,请先使用 SetImage 和前缀名称加载图像,然后调用 StartAnimating

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

对图像控件调用 StopAnimating 以停止动画循环:

animatedImage.StopAnimating ();

附录:缓存图像 (watchOS 1)

重要

watchOS 3 应用完整运行在设备上。 以下信息仅适用于 watchOS 1 应用。

如果应用程序反复使用存储在扩展中(或已下载)的图像,则可能会在 Watch 的存储中缓存图像,以提高后续显示的性能。

使用 WKInterfaceDeviceAddCachedImage 方法将图像传输到 Watch,然后使用 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 对象上的 RemoveCachedImageRemoveAllCachedImages 方法清除文件。