系统环境
Mac OS 10.15.6
Xcode 12.4
前言
Complication
很多人译为“并发症”,非常耐人寻味。Complication
有“复杂化”的意思层面,CLKComplication
用于开发表盘上的功能部件,我把它理解为表盘上的复杂功能组件
。
实践中发现随着watchOS
版本的升级,CLKComplicationFamily
枚举类型已经拓展到12种,CLKComplicationTemplate
的模板子类也多达57个,加上每个模板通过配置不同的属性,样式也有有所不同,可谓是纷乱复杂到令人难以理解的地步,有点明白为什么叫Complication
了。
Complication简介
Complication
是 WatchOS 2.0引入的,它是表盘上展示的小元素,可以快速访问常用数据。当用户在表盘上添加你App支持的表盘小部件,便可以在表盘展示App的指定的数据,且支持直接从表盘唤醒App。系统提供了一些内置的Complication,比如天气、日历、活动以及更多类型的数据提供内置复杂功能。
Apple Watch支持各式各样的表盘,而不同样式的表盘所能支持的Complication
的样式各不相同,
ClockKit通过其family
和identifier
属性来定义每个Complication
,每对代表一个独特的复杂功能,用户可以在配置表盘时选择。创建CLKComplicationTimelineEntry
时,通过判断这两个属性来创建和填充不同的CLKComplicationTemplate
。
ClockKit定义了每个表盘上复杂功能的大小和位置。下图描述了模块化表盘的布局,该表盘有空间容纳五种不同的复杂情况:一个大而四个小。
ClockKit根据其大小和样式将Complication
归纳到各个CLKComplicationFamily
枚举类型中,并为每个CLKComplicationFamily
枚举类型提供各种模板。使用模板显示文本,图像和图形仪表。
支持Complication的好处
用户将App的复杂功能放在主动表盘上,每当用户瞥了一眼手表时,有机会看到App提供的有用的数据。
该系统还提供了较大的预算给拥有活跃复杂功能的App,用于后台刷新任务。可以使用这些任务来使watchOS应用程序的内容和复杂功能保持最新且准确。
添加占位符
当用户配置表盘时,ClockKit会为Complication
显示占位符。Watch App可以提供静态图像和本地化模板作为占位符。
ClockKit尽可能使用本地化的模板。但是,如果模板不可用(例如,用户首次安装您的应用程序时),它可能会显示静态图像。
静态占位符
对于静态占位符,请将图像放置在Watch Extension的Assets目录中的Complications group
中。
本地化的模板
对于本地化的模板,请实现CLKComplicationDataSource的getLocalizableSampleTemplate(for:withHandler:)方法。
实现数据源CLKComplicationDataSource
ClockKit通过调用CLKComplicationDataSource协议的方法,来请求有关Watch App支持的Complication的信息,并在活动表盘上填充该Complication的时间轴。
而我们需要实现相关协议方法,来提供Complication所需的数据。
获取当前时间轴条目(必须实现)
检索App当前要显示的时间轴条目。
使用此方法的实现必须创建一个时间轴条目,并带有要立即显示的数据。
func getCurrentTimelineEntry(for complication: CLKComplication,
withHandler handler: @escaping (CLKComplicationTimelineEntry?) -> Void)
在watchOS 6及之前版本,要同时实现getSupportedTimeTravelDirections(for:withHandler:)来指定是否App可以批量加载未来时间安排条目。(在watchOS 7已废弃)
获取时间轴结束日期
检索App可提供的数据的最后日期。
如果未实现此方法,或指定当前日期,系统将不会检索当前条目之后的时间轴条目。
optional func getTimelineEndDate(for complication: CLKComplication,
withHandler handler: @escaping (Date?) -> Void)
未完待续......
网友评论