WatchOS 简介

注意

有关最新功能的概述,请查看 watchOS 3 简介

关于 watchOS

watchOS 应用解决方案有 3 个项目:

  • 手表扩展 – 包含手表应用代码的项目。
  • 手表应用 – 包含用户界面情节提要和资源。
  • iOS 父应用 – 此应用是一个普通的 iPhone 应用。 手表应用和扩展捆绑到 iPhone 应用中,以向用户的手表传送内容。

在 watchOS 1 应用中,扩展中的代码在 iPhone 上运行 – Apple Watch 实际上是一个外部显示屏。 watchOS 2 和 watchOS 3 应用则完全在 Apple Watch 上运行。 下图显示了这一区别:

此图显示了 watchOS 1 和 watchOS 2(及更高版本)之间的差异

无论是哪个版本的 watchOS,在 Visual Studio for Mac 的 Solution Pad 中,完整的解决方案都将如下所示:

Solution Pad

watchOS 解决方案中的父应用是一个常规的 iOS 应用。 这是解决方案中唯一在手机上可见的项目。 此应用的用例包括教程、管理屏幕以及中间层筛选、缓存等。但是,用户可以在从未打开父应用的情况下安装和运行手表应用/扩展,因此,如果需要运行父应用以进行一次性初始化或管理,则需要对手表应用/扩展进行编程以告知用户。

尽管父应用提供手表应用和扩展,但它们是在不同的沙盒中运行。

在 watchOS 1 上,它们可以通过共享应用组或通过静态函数 WKInterfaceController.OpenParentApplication 共享数据,该函数将在父应用的 AppDelegate 中触发 UIApplicationDelegate.HandleWatchKitExtensionRequest 方法(请参阅使用父应用)。

在 watchOS 2 或更高版本上,手表连接框架用于使用 WCSession 类与父应用通信。

应用程序生命周期

在手表扩展中,将为每个情节提要场景创建一个 WKInterfaceController 类的子类。

这些 WKInterfaceController 类类似于 iOS 编程中的 UIViewController 对象,但具有不同的视图访问权限级别。 例如,不能向 UI 动态添加控件或对其进行重构。 但是,可以隐藏和显示控件,对于某些控件,还可以更改其大小、透明度和外观选项。

WKInterfaceController 对象的生命周期涉及以下调用:

  • Awake:应在此方法中执行大部分初始化。
  • WillActivate:在手表应用向用户显示前不久调用。 可使用此方法执行最后一刻初始化、启动动画等。
  • 此时,将显示手表应用,扩展开始响应用户输入,并按照应用程序逻辑更新手表应用的显示。
  • DidDeactivate:在用户关闭手表应用后,将调用此方法。 此方法返回后,在下次调用 WillActivate 之前,无法修改用户界面控件。 如果与 iPhone 的连接断开,也会调用此方法。
  • 停用扩展后,程序将无法访问它。 不会调用挂起的异步函数。 Watch Kit 扩展可能不使用后台处理模式。 如果用户重新激活程序,但应用尚未被操作系统终止,则调用的第一种方法将是 WillActivate

应用程序生命周期概述

用户界面的类型

用户可以与手表应用进行三种类型的交互。 所有这些都使用 WKInterfaceController 的自定义子类进行编程,因此以前讨论过的生命周期序列普遍适用(通知使用 WKUserNotificationController 的子类进行编程,其本身是 WKInterfaceController 的子类):

普通交互

大多数手表应用/扩展交互是与你编写的 WKInterfaceController 的子类,对应手表应用的 Interface.storyboard 中的场景。 安装入门文章中详细介绍了这一点。 下图显示了示例情节提要的一部分。 对于此处显示的每个场景,扩展项目中都有相应的自定义 WKInterfaceControllerLabelDetailControllerButtonDetailControllerSwitchDetailController 等)。

普通交互示例

通知

通知是 Apple Watch 的主要用例。 支持本地和远程通知。 与通知的交互分为两个阶段,称为“短外观”和“长外观”。

短外观会短暂显示,显示手表应用图标、名称和标题(按照 WKInterfaceController.SetTitle 的指定)。

长外观将系统提供的 sash 区域和“消除”按钮与基于情节提要的自定义内容组合在一起。

WKUserNotificationInterfaceController 使用方法 DidReceiveLocalNotificationDidReceiveRemoteNotification 扩展 WKInterfaceController。 重写这些方法可响应通知事件。

有关通知 UI 设计的详细信息,请参阅 Apple Watch 人机界面指南

示例通知

屏幕大小

Apple Watch 有两个表盘尺寸:38 毫米和 42 毫米,显示比例均为 5:4,使用 Retina 显示屏。 可用尺寸分别为:

  • 38 毫米:136 x 170 逻辑像素(272 x 340 物理像素)
  • 42 毫米:156 x 195 逻辑像素(312 x 390 物理像素)。

使用 WKInterfaceDevice.ScreenBounds 可确定手表应用正在使用的显示屏。

通常,使用较小的 38 毫米显示屏可以更轻松地开发文本和布局设计,然后纵向扩展。 如果从较大的环境开始,纵向缩减可能会导致难看的重叠或文本截断。

详细了解如何使用屏幕大小

watchOS 的限制

开发 watchOS 应用时需要注意 watchOS 的一些限制:

  • Apple Watch 设备存储空间有限 - 在下载大型文件(例如音频或电影文件)之前,请注意可用空间。

  • 许多 watchOS 控件 在 UIKit 中具有相似项,但类不同(WKInterfaceButton 而不是 UIButtonWKInterfaceSwitch 而不是 UISwitch),并且与 UIKit 等效项相比,方法集有限。 此外,watchOS 还有一些 UIKit 所没有的控件,例如 WKInterfaceDate(用于显示日期和时间)。

    • 不能仅将通知路由到 Watch,或仅路由到 iPhone(Apple 尚未宣布用户对路由的控件方式)。

其他一些已知限制/常见问题:

  • Apple 不允许第三方自定义手表表盘。

  • 允许 Watch 在连接的手机上控制 iTunes 的 API 是专用 API。

深入阅读

从 Apple 签出文档: