Swift - анимация CAGradientLayer с помощью оператора switch

У меня есть градиентный фон, который создается с помощью CAGradientLayer. У меня также есть оператор switch, который обновляет цвета градиентного слоя в зависимости от других частей пользовательского интерфейса. Это работает отлично, однако, "затухание" между градиентами очень и очень быстрое. Я даже не указал это в быстром проекте. Это просто медленно угасает.

Я бы хотел, чтобы длительность замирания составляла 0,5 секунды.

Вот мое заявление о переключении.

    switch newValue{
        case 1..<70:
        gradientLayer.colors = [gradientColor1a, gradientColor1b]
        case 70..<120:
        gradientLayer.colors = [gradientColor2a, gradientColor2b]
        case 120..<190:
        gradientLayer.colors = [gradientColor3a, gradientColor3b]
        case 190..<400:
        gradientLayer.colors = [gradientColor4a, gradientColor4b]
        default:
        gradientLayer.colors = [gradientColor1a, gradientColor1b]
    }

В документации, которую я читаю, говорится, что вы можете анимировать с помощью toValue / fromValue, однако я не знаю, как реализовать это в моем выражении switch выше. Можно ли использовать CABasicAnimation для этого?

Как я могу заставить эти градиенты исчезать в течение 0.5 длительности, основываясь на значении моего переключателя? Благодарю.

1 ответ

Решение

Вы пытались это сделать?

CATransaction.setAnimationDuration(0.5)

Вы должны быть в состоянии поместить это чуть выше вашего оператора switch.

Посмотрите на этот ответ для большей проницательности. Измените время анимации для свойств CALayer.

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