Как отобразить изображение в усложнении 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)
    }

}

И не забудьте указать свой класс источника данных в конфигурации Complication как $(PRODUCT_MODULE_NAME).ComplicationController и установите соответствующие флажки.

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

Другие вопросы по тегам