WatchOS 简介
注意
有关最新功能的概述,请查看 watchOS 3 简介。
关于 watchOS
watchOS 应用解决方案有 3 个项目:
- 手表扩展 – 包含手表应用代码的项目。
- 手表应用 – 包含用户界面情节提要和资源。
- iOS 父应用 – 此应用是一个普通的 iPhone 应用。 手表应用和扩展捆绑到 iPhone 应用中,以向用户的手表传送内容。
在 watchOS 1 应用中,扩展中的代码在 iPhone 上运行 – Apple Watch 实际上是一个外部显示屏。 watchOS 2 和 watchOS 3 应用则完全在 Apple Watch 上运行。 下图显示了这一区别:
无论是哪个版本的 watchOS,在 Visual Studio for Mac 的 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 中的场景。 安装和入门文章中详细介绍了这一点。
下图显示了示例情节提要的一部分。 对于此处显示的每个场景,扩展项目中都有相应的自定义 WKInterfaceController
(LabelDetailController
、ButtonDetailController
、SwitchDetailController
等)。
通知
通知是 Apple Watch 的主要用例。 支持本地和远程通知。 与通知的交互分为两个阶段,称为“短外观”和“长外观”。
短外观会短暂显示,显示手表应用图标、名称和标题(按照 WKInterfaceController.SetTitle
的指定)。
长外观将系统提供的 sash 区域和“消除”按钮与基于情节提要的自定义内容组合在一起。
WKUserNotificationInterfaceController
使用方法 DidReceiveLocalNotification
和 DidReceiveRemoteNotification
扩展 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
而不是UIButton
,WKInterfaceSwitch
而不是UISwitch
),并且与 UIKit 等效项相比,方法集有限。 此外,watchOS 还有一些 UIKit 所没有的控件,例如WKInterfaceDate
(用于显示日期和时间)。- 不能仅将通知路由到 Watch,或仅路由到 iPhone(Apple 尚未宣布用户对路由的控件方式)。
其他一些已知限制/常见问题:
Apple 不允许第三方自定义手表表盘。
允许 Watch 在连接的手机上控制 iTunes 的 API 是专用 API。
深入阅读
从 Apple 签出文档: