Как отобразить изображение в усложнении 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
и установите соответствующие флажки.
Это минимальная сложность конфигурации в вашем случае.