WatchOS цветовая анимация фона

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

Вот код, который я использую для анимации:

animate(withDuration: 0.2, animations: {
    //set first color
    //mainGroup is a WKInterfaceGroup
    self.mainGroup.setBackgroundColor(color)
    //set back black color
    self.mainGroup.setBackgroundColor(UIColor.black)
})

3 ответа

Я исследовал немного больше. В WatchKit нет опций для функции анимации, и это делает ее более сложной (нельзя использовать автореверс). Решение не идеальное, но оно более или менее работает. Вам нужно сначала установить желаемый цвет моргания, а после этого оживить переход на черный.

self.mainGroup.setBackgroundColor(color)
animate(withDuration: 0.2, animations: {
    self.mainGroup.setBackgroundColor(UIColor.black)
})

Если вам нужен более сложный тайминг, например плавная анимация "в", вы можете использовать отложенное выполнение:

animate(withDuration: 0.2) {
    self.mainGroup.setBackgroundColor(color)
} 
DispatchQueue.main.asyncAfter(deadline: DispatchTime.now() + 0.21) {
    animate(withDuration: 0.2) {
        self.mainGroup.setBackgroundColor(.black)
    }
}

У меня было аналогичное поведение (анимация запускалась только один раз), пока я не встроил анимацию в блок DispatchQueue.main.async(). Тогда это сработало надежно.

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