美文网首页
Apple Watch开发-复杂功能开发 CLKComplica

Apple Watch开发-复杂功能开发 CLKComplica

作者: Aaron升 | 来源:发表于2021-05-21 02:54 被阅读0次

    系统环境

    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通过其familyidentifier属性来定义每个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)
    

    未完待续......

    参考资料

    CLKComplicationDataSource官方文档

    相关文章

      网友评论

          本文标题:Apple Watch开发-复杂功能开发 CLKComplica

          本文链接:https://www.haomeiwen.com/subject/brzvjltx.html