У меня есть оператор switch, управляющий моими градиентами фона. Он отлично работает (изменение градиентов), однако он резко меняется. Я бы хотел, чтобы эти градиенты исчезали друг с другом с длительностью 0,25. Моя попытка сделать это ниже.Swift - Использование animateWithDuration для выцветания CAGradientLayer
переключатель заявление, которое контролирует фон:
switch backgroundInput{
case 50...69:
self.view.configureGradient([gradientColor1, gradientColor2])
case 70...90:
self.view.configureGradient([gradientColor2, gradientColor3])
case 91...110:
self.view.configureGradient([gradientColor3, gradientColor4])
case 111...130:
self.view.configureGradient([gradientColor4, gradientColor5])
case 131...150:
self.view.configureGradient([gradientColor5, gradientColor6])
case 151...170:
self.view.configureGradient([gradientColor6, gradientColor7])
default:
self.view.configureGradient([lightPurple, lightBlue])
}
Extension, который контролирует градиенты Здесь я попытался длительность анимировать
extension UIView {
private func prepareGradient() -> CAGradientLayer {
let gradientLayer = CAGradientLayer()
gradientLayer.frame = self.bounds
gradientLayer.startPoint = CGPoint(x: 0.0, y: 0.0)
gradientLayer.endPoint = CGPoint(x: 1.0, y: 1.0)
gradientLayer.zPosition = -1
self.layer.addSublayer(gradientLayer)
return gradientLayer
}
func configureGradient(colors:[CGColor]) {
let gradientLayer = prepareGradient()
UIView.animateWithDuration(0.25, delay: 0.0, options: UIViewAnimationOptions.CurveEaseInOut, animations: {
gradientLayer.colors = colors
}, completion: nil)
}
}
Как я могу настроить мой код выше, чтобы угаснуть градиентные слои от одного к другому? (Несвязанного - это плохо для памяти постоянно «добавить подслой» на подуровни?)
Да, неудобно постоянно добавлять дополнительные подслои. Вы должны создать один слой градиента, а затем изменить его свойства, чтобы обновить градиент. Исправьте это, вернитесь и обновите свой вопрос с помощью нового кода, если у вас все еще есть проблемы. –
@robmayoff - Yikes. Рад, что я поймал это! Является ли исправление здесь столь же простым, как удаление self.layer.addSublayer (gradientLayer) из функции configureGradient и перенос его в prepareGradient? (Я редактировал мой код выше.) – Joe