iOS WatchOS5 - 如何为手表应用程序支持多个复杂功能系列?

Posted

技术标签:

【中文标题】iOS WatchOS5 - 如何为手表应用程序支持多个复杂功能系列?【英文标题】:iOS WatchOS5 - How to support more than one complication family for a watch app? 【发布时间】:2019-02-25 22:44:59 【问题描述】:

我的 Apple Watch 应用有一个复杂功能,我想添加第二种样式。我建立了一个非常基本的原型,但在表盘上看不到它可供选择。所以我正在尝试解决这个问题:

我的应用可以支持多种并发症吗? 我可以在表盘上同时运行两个并发症吗?(或者是非此即彼的情况,如果我有一个,ios 不会显示第二个?)我尝试添加一个新的表盘,但它不允许我。

CLKComplicationTemplateModularSmallRingTextModularSmall 复杂类型的有效模板吗?

    func getCurrentTimelineEntry(for complication: CLKComplication, withHandler handler: @escaping (CLKComplicationTimelineEntry?) -> Void) 

        if complication.family == .modularSmall 
            let template = CLKComplicationTemplateModularSmallRingText()
            template.ringStyle = .open
            template.fillFraction = 0.3

            let testProvider = CLKSimpleTextProvider(text: "TST", shortText: "S")
            sleep.tintColor = UIColor.green
            template.textProvider = testProvider
            template.tintColor = UIColor.green

            let entry = CLKComplicationTimelineEntry(date: Date(), complicationTemplate: template)

            // Pass the entry to ClockKit.
            handler(entry)
        
        else if complication.family == .graphicRectangular 
            let template = CLKComplicationTemplateGraphicRectangularLargeImage()
//this complication works...

占位符模板暂时相同:

func getPlaceholderTemplate(for complication: CLKComplication, withHandler handler: @escaping (CLKComplicationTemplate?) -> Void) 

    // Pass the template to ClockKit.
    if complication.family == .modularSmall 
        let template = CLKComplicationTemplateModularSmallRingText()
//...

我在并发症占位符文件中看到一个错误(但我正在 44 毫米设备上进行测试) - 将修复它并查看发生了什么。我是否为模块化并发症返回了错误的图像或错误的模板类型?我想要一个圆环规

【问题讨论】:

【参考方案1】:

原来我被 Apple 的文档误导了。我需要使用 GraphicCircular 复杂功能(WatchOS5 中的新功能)类型,而不是模块化(旧表盘)

func circularTemplate() -> CLKComplicationTemplateGraphicCircularOpenGaugeSimpleText
    let template = CLKComplicationTemplateGraphicCircularOpenGaugeSimpleText()
    let gauge = CLKSimpleGaugeProvider(style: .ring, gaugeColor: UIColor.green), fillFraction: 0.3)
    template.gaugeProvider = gauge

    let random = arc4random() % 999

    let middle = CLKSimpleTextProvider(text: "4.5", shortText: "4")
    middle.tintColor = kRGBColorFromHex(0x657585)
    template.tintColor = kRGBColorFromHex(0x657585)
    template.centerTextProvider = middle

    let bottom = CLKSimpleTextProvider(text: "-\(random)", shortText: "1..")
    template.bottomTextProvider = bottom
    return template

新风格:

旧样式:

【讨论】:

以上是关于iOS WatchOS5 - 如何为手表应用程序支持多个复杂功能系列?的主要内容,如果未能解决你的问题,请参考以下文章

如何支持 iOS 9.3 和 watchOS 2.2 的多个手表

如何为 Apple Watch 配置本地通知

如何为两支球队的比赛找到最佳解决方案?

如何为 iPhone 制作聊天客户端 [关闭]

iOS WatchOS5 - 如何以编程方式检测 Apple Watch 是不是在特定时间间隔戴在手腕上(佩戴)?

如何创建苹果 watchOS 5 的复杂功能?