Многие свойства, которые вы установили для CALayer
и его подклассов, будут анимированы по умолчанию. Для градиентного слоя это включает границы, цвета градиента, а также начальную и конечную точки, все из которых вы устанавливаете здесь.
Это называется неявной анимацией.
Вы можете отключить его, создав транзакцию, отключив действия, выполнив изменения и сохранив транзакцию:
CATransaction.begin()
CATransaction.setDisableActions(true)
// Do your stuff
CATransaction.commit()
Однако, это может стать немного грязным. Альтернативой является создание подкласса неанимационного слоя и использование его вместо CAGradientLayer
:
class NonAnimatingGradientLayer: CAGradientLayer {
override func action(forKey event: String) -> CAAction? {
return NSNull()
}
}
Используйте это вместо CAGradientLayer
, и ничто не будет анимировано.