Xamarin 中的 watchOS 图像控件
watchOS 提供 WKInterfaceImage
控件来显示图像和简单的动画。 某些控件还可以具有背景图像(如按钮、组和接口控制器)。
使用资产目录图像将图像添加到 Watch Kit 应用。 只有 @2x 版本必需执行此操作,因为所有 Watch 设备都配有 Retina 显示屏。
最好确保图像本身适合 Watch 显示屏的大小。 避免使用大小不正确的图像(尤其是大图像)和通过缩放在 Watch 上显示它们。
可以使用资产目录图像中的 Watch Kit 大小(38mm 和 42mm)为每个显示大小指定不同的图像。
Watch 上的图像
显示图像的最有效方法是将其包含在 Watch 应用项目中,并使用 SetImage(string imageName)
方法显示它们。
例如,示例将大量图像添加到了 Watch 应用项目的资产目录中:
可以使用 SetImage
和字符串名称参数在 Watch 上高效加载和显示这些值:
myImageControl.SetImage("Whale");
myOtherImageControl.SetImage("Worry");
背景图像
相同的逻辑适用于 Button
、Group
和 InterfaceController
类上的 SetBackgroundImage (string imageName)
。 将图像存储在 Watch 应用本地可实现最佳性能。
Watch 扩展中的图像
除了加载存储在 Watch 应用本地的图像之外,还可以将扩展捆绑包中的图像发送到 Watch 应用进行显示(也可以从远程位置下载图像,然后显示这些图像)。
若要从 Watch 扩展加载图像,请创建 UIImage
实例,然后使用 UIImage
对象调用 SetImage
。
例如,示例在 Watch 扩展项目中有一个名为 Bumblebee 的图像:
以下代码将实现:
- 将图像加载到内存中,然后
- 显示在 Watch 上。
using (var image = UIImage.FromBundle ("Bumblebee")) {
myImageControl.SetImage (image);
}
动画
若要对一组图像进行动画处理,它们应以相同的前缀开头,并具有数字后缀。
该示例在 Watch 应用项目中包含一系列带有 Bus 前缀的编号图像:
若要将这些图像显示为动画,请先使用 SetImage
和前缀名称加载图像,然后调用 StartAnimating
:
animatedImage.SetImage ("Bus");
animatedImage.StartAnimating ();
对图像控件调用 StopAnimating
以停止动画循环:
animatedImage.StopAnimating ();
附录:缓存图像 (watchOS 1)
重要
watchOS 3 应用完整运行在设备上。 以下信息仅适用于 watchOS 1 应用。
如果应用程序反复使用存储在扩展中(或已下载)的图像,则可能会在 Watch 的存储中缓存图像,以提高后续显示的性能。
使用 WKInterfaceDevice
的 AddCachedImage
方法将图像传输到 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
对象上的 RemoveCachedImage
或 RemoveAllCachedImages
方法清除文件。