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(). Тогда это сработало надежно.