【问题标题】:How to display image in watchOS complication如何在 watchOS 复杂功能中显示图像
【发布时间】:2015-12-23 14:21:30
【问题描述】:

我目前正在为我的 watchOS 2 应用设置复杂功能。

我想提供三种不同类型的并发症:

  • 实用小
  • 模块化小商品
  • 圆形小

所有这些并发症类型都应该简单地将我的应用程序图标显示为图像。在我的 ClockKit 类中,我实现了以下方法:

func getCurrentTimelineEntryForComplication(complication: CLKComplication, withHandler handler: (CLKComplicationTimelineEntry?) -> Void) {

    if complication.family == .CircularSmall {

        let template = CLKComplicationTemplateCircularSmallRingImage()
        template.imageProvider = CLKImageProvider(onePieceImage: UIImage(named: "app_icon")!)
        let timelineEntry = CLKComplicationTimelineEntry(date: NSDate(), complicationTemplate: template)
        handler(timelineEntry)

    } else if complication.family == .UtilitarianSmall{

        let template = CLKComplicationTemplateUtilitarianSmallRingImage()
        template.imageProvider = CLKImageProvider(onePieceImage: UIImage(named: "app_icon")!)
        let timelineEntry = CLKComplicationTimelineEntry(date: NSDate(), complicationTemplate: template)
        handler(timelineEntry)

    } else if complication.family == .ModularSmall {

        let template = CLKComplicationTemplateModularSmallRingImage()
        template.imageProvider = CLKImageProvider(onePieceImage: UIImage(named: "app_icon")!)
        let timelineEntry = CLKComplicationTimelineEntry(date: NSDate(), complicationTemplate: template)
        handler(timelineEntry)

    } else {

        handler(nil)

    }

}

我不确定这是实现我的想法的适当方式,所以我想知道仅显示图像作为我的复杂功能的代码。有谁知道我如何做到这一点?

【问题讨论】:

    标签: swift watchkit apple-watch watchos-2


    【解决方案1】:

    首先,我强烈建议您观看有关并发症的Apple's session,除非您还没有看过。

    您至少需要在您的ComplicationController 中实现以下3 个CLKComplicationDataSource 的非可选方法:

    public func getSupportedTimeTravelDirectionsForComplication(complication: CLKComplication, withHandler handler: (CLKComplicationTimeTravelDirections) -> Void)
    public func getCurrentTimelineEntryForComplication(complication: CLKComplication, withHandler handler: (CLKComplicationTimelineEntry?) -> Void)
    public func getPlaceholderTemplateForComplication(complication: CLKComplication, withHandler handler: (CLKComplicationTemplate?) -> Void)
    

    所有其他方法都是可选的。据你所见,你只实现了第二个。在您的上下文中,其余两个的实现可能如下:

    class ComplicationController: NSObject, CLKComplicationDataSource {
    
        func getSupportedTimeTravelDirectionsForComplication(complication: CLKComplication, withHandler handler: (CLKComplicationTimeTravelDirections) -> Void) { 
            // Turn off time travelling
            handler([CLKComplicationTimeTravelDirections.None])
        }
    
        func getPlaceholderTemplateForComplication(complication: CLKComplication, withHandler handler: (CLKComplicationTemplate?) -> Void) {
            var template: CLKComplicationTemplate?
    
            switch complication.family {
                case .CircularSmall:
                    template = CLKComplicationTemplateCircularSmallRingImage()
                    template.imageProvider = CLKImageProvider(onePieceImage: UIImage(named: "app_icon")!)
                case .UtilitarianSmall:
                    template = CLKComplicationTemplateUtilitarianSmallRingImage()
                    template.imageProvider = CLKImageProvider(onePieceImage: UIImage(named: "app_icon")!)
                case .ModularSmall:
                    template = CLKComplicationTemplateModularSmallRingImage()
                    template.imageProvider = CLKImageProvider(onePieceImage: UIImage(named: "app_icon")!)
                case .ModularLarge:
                    template = nil
                case .UtilitarianLarge:
                    template = nil
            }
    
            handler(template)
        }
    
    }
    

    不要忘记在复杂配置中将您的数据源类指定为$(PRODUCT_MODULE_NAME).ComplicationController 并选中相应的复选框。

    这是您的情况下最小的复杂配置。

    【讨论】:

    • 感谢您的详细回答-也许我没有说明我已经实现了这些方法,否则我无法构建应用程序。我会看看你建议的 WWDC 会议视频。
    • @pi1000 - 使用配置屏幕截图更新了答案。我认为您需要列举您所做的所有事情,包括我附加的设置。
    • 是的,谢谢,但还是有些误会。我将复杂性视为一个圆形,但我不希望它有这样的模板,并想知道我是否可以使用我的应用程序图标作为图像。
    • 我终于得到了你想要的 :) 不,你不能在复杂的情况下使用你的应用程序徽标 - 你需要只使用一种具有透明度的颜色(alpha 通道)来调整一个。请仔细聆听从 12:10 开始的会议视频,否则您将只看到一个彩色图标(是的 - 圆形圆圈是您的应用程序徽标)。
    • 不需要 $(PRODUCT_MODULE_NAME).ComplicationController,只需在配置中使用 ComplicationController。 Complications Group 是各种尺寸图像所在文件夹的名称,因此如果是“Complication”,则使用它,如果没有文件夹,则使用上述“none”。图像的名称必须引用为“FolderName/ImageName”,如“Complication/Modular”等,但请注意在导入期间 XCode 使用原始“Modular”等名称而不是文件名!你可以重命名它,但是当我看到复杂的东西,忙碌的 api 变化时,我的建议是保持原样!
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2015-12-02
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-11-22
    相关资源
    最近更新 更多