Как отобразить изображение в усложнении watchOS

в настоящее время я настраиваю осложнения для моего приложения 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)

    }

}

Я не уверен, что это подходящий способ реализация моей идеи, поэтому я хотел бы знать код для отображения изображения в качестве моего осложнения. Кто-нибудь знает, как мне этого добиться?

1 ответов


сначала я настоятельно рекомендую вам смотреть сессия Apple о осложнениях, если вы еще не видели его.

вам нужно реализовать 3 следующих необязательных метода CLKComplicationDataSource в своем ComplicationController по крайней мере:

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 и установите соответствующие флажки. enter image description here

Это минимальная конфигурация осложнения в вашем случае.