watchOS复杂功能开发:如何在CLKRelativeDateTextProvider旁添加文本
解决方案
使用CLKTextProvider的多文本拼接API即可实现静态前缀+动态计时器的组合效果,CLKComplicationTemplateUtilitarianLargeFlat的textProvider原生支持传入拼接后的复合文本提供器。
实现步骤
- 创建静态文本提供器,内容为你需要的前缀「GBT * 」
- 保留原有的
CLKRelativeDateTextProvider配置,若要显示秒级倒计时需要在calendarUnits中添加.second - 调用
CLKTextProvider的拼接方法,将两个文本提供器合并,分隔符按需设置即可 - 将拼接后的文本提供器赋值给模板的
textProvider
修改后的完整代码
func createUtilitarianLargeTemplate(prayer: Prayer?) -> CLKComplicationTemplate { let myComplicationTemplate = CLKComplicationTemplateUtilitarianLargeFlat() // 创建前缀静态文本提供器 let prefixTextProvider = CLKTextProvider(format: "GBT * ") // 倒计时文本提供器,添加.second单位以显示秒数 let dateProvider = CLKRelativeDateTextProvider() if let prayer = prayer { dateProvider.date = prayer.prayerTime.prayerDate dateProvider.calendarUnits = [.hour, .minute, .second] dateProvider.relativeDateStyle = .timer } // 拼接两个文本提供器 let combinedTextProvider = CLKTextProvider(byJoining: [prefixTextProvider, dateProvider], separator: "") // 赋值给模板 myComplicationTemplate.textProvider = combinedTextProvider return myComplicationTemplate }
补充说明
- 如果需要调整前缀和计时器之间的间距,可以把拼接时的
separator参数改为空格或者其他空白字符 - 如果需要前缀和计时器显示不同的颜色,可以分别给
prefixTextProvider和dateProvider设置tintColor属性 - 该实现方式兼容所有支持
CLKComplicationTemplateUtilitarianLargeFlat的watchOS版本,不需要自定义渲染视图
内容的提问来源于stack exchange,提问作者SwiftiSwift
相关产品推荐
相关产品推荐

