Усложнение WatchOS

У меня есть массив из 10 событий, предположим, что текущее время 10 утра, а событие начнется в 11 утра. Каждое событие длится 30 минут, а промежуток между двумя событиями составляет 30 минут.

Теперь я могу показать, что вся необходимая информация на циферблате указана правильно, т. е. когда циферблат запускается, он говорит, что следующее событие состоится в 11:00, а когда первое событие завершится в 11:30, в 11:00: Циферблат 31:00 показывает, что следующее мероприятие начнется в 12:00.

Я могу сделать это все успешно.

Я сталкиваюсь с проблемой, когда хочу показать напоминание о первом событии всего за 15 минут до его начала.

Например, если первое событие дня начнется в 11:00, то циферблат покажет напоминание об этом первом событии только в 10:45, но не ранее 10:45.

Кроме того, как я могу удалить осложнение, когда последнее событие дня закончилось?

Я просмотрела видео осложнениях WWDC - 2015.

Я пытаюсь показать усложнение на CLKComplicationTemplateModularLargeStandardBody.

    private func getTimeLineEntry() -> Date {
    
     if shouldShowCountDown {
         return startDate.addingTimeInterval(-15 * 60)
     } else {
         return startDate
     }
    }

func getCurrentTimelineEntry(for complication: CLKComplication, withHandler handler: @escaping (CLKComplicationTimelineEntry?) -> Void) {
    // Call the handler with the current timeline entry

      let headerTextProvider = CLKSimpleTextProvider(text: "Complication Updates")
            let body1 = "My Title"
            let body1TextProvider = CLKSimpleTextProvider(text: body1)
            let body2TextProvider = CLKSimpleTextProvider(text: "My Subtitle")
    
            let template = CLKComplicationTemplateModularLargeStandardBody(headerTextProvider: headerTextProvider, body1TextProvider: body1TextProvider, body2TextProvider: body2TextProvider)
    
            let entry = CLKComplicationTimelineEntry(date: getTimeLineEntry(), complicationTemplate: template)
            handler(entry)
    
}

Здесь startDate — 11:00, и я хочу показать напоминание об усложнении за 15 минут до события, то есть в 10:45. Я использовал логическую переменную, чтобы решить, является ли текущее время startDate › Current Date. Если да, то покажите обратный отсчет за 15 минут до.


person Programming Learner    schedule 22.06.2021    source источник
comment
Вы не можете удалить осложнение; вам просто нужно отобразить сообщение, например, никаких событий или что-то в этом роде. Для времени начала события вам просто нужно указать правильное время для записи на временной шкале и что-то отображать перед этим; пустое состояние некоторого типа.   -  person Paulw11    schedule 22.06.2021
comment
@ Paulw11, спасибо за ответ. Я добавляю свой код здесь, пожалуйста, дайте мне знать, что мне не хватает в моем коде.   -  person Programming Learner    schedule 22.06.2021
comment
Я не могу точно сказать, что добавить, но в getCurrentTimelineEntry вы меняете содержание вашего усложнения в зависимости от того, есть ли текущее или предстоящее событие или нет. Вы также можете использовать этот метод для предоставления последовательности записей для вашей временной шкалы   -  person Paulw11    schedule 23.06.2021
comment
Привет @Paulw11, спасибо за вашу помощь и руководство, теперь я могу показать сложность в соответствии с моим требованием. Все, что мне нужно было сделать, это показать пустой шаблон во время первого события.   -  person Programming Learner    schedule 25.06.2021


Ответы (1)


Исправление этой проблемы: нам нужно сделать первый шаблон пустым.

func getCurrentTimelineEntry(for complication: CLKComplication, withHandler handler: @escaping (CLKComplicationTimelineEntry?) -> Void) {
    // Call the handler with the current timeline entry
    let headerTextProvider = CLKSimpleTextProvider(text: "")
    let body1TextProvider = CLKSimpleTextProvider(text: "")
    let body2TextProvider = CLKSimpleTextProvider(text: "")
    let template = CLKComplicationTemplateModularLargeStandardBody(headerTextProvider: headerTextProvider, body1TextProvider: body1TextProvider, body2TextProvider: body2TextProvider)
    let entry = CLKComplicationTimelineEntry(date: Date(), complicationTemplate: template)
    handler(entry)
}

Таким образом, даже если усложнение будет запущено в любое время, оно покажет пользователю пустой шаблон, а когда время будет 10:45, оно начнет отображать первое усложнение на WatchFace.

func getTimelineEntries(for complication: CLKComplication, after date: Date, limit: Int, withHandler handler: @escaping ([CLKComplicationTimelineEntry]?) -> Void) {
    // Call the handler with the timeline entries after the given date
    guard !array.isEmpty else {
        handler(nil)
        return
    }
    
    var entries: [CLKComplicationTimelineEntry] = []
    
    for (index, arrayObj) in array.enumerated() {
        var nextDate = Date()
        nextDate = (index == 0) ? (arrayObj.startDate).addingTimeInterval(TimeInterval(-15 * 60)) : arrayObj.startDate
        
        let headerTextProvider = CLKSimpleTextProvider(text: "Event Update")
    let body1TextProvider = CLKSimpleTextProvider(text: "Event will start at")
    let body2TextProvider = Date(timeInterval: arrayObj.interval, since: arrayObj.startDate)
    let template = CLKComplicationTemplateModularLargeStandardBody(headerTextProvider: headerTextProvider, body1TextProvider: body1TextProvider, body2TextProvider: body2TextProvider)
        let entry = CLKComplicationTimelineEntry(date: nextDate, complicationTemplate: template)
        entries.append(entry)

        if entries.count == limit { break }
    }
    handler(entries)
}
person Programming Learner    schedule 25.06.2021