Это работает:
let animation = CABasicAnimation(keyPath: "opacity")
animation.fromValue = 0
animation.toValue = 1
animation.duration = 0.3
someLayer.opacity = 1 // important, this is the state you want visible after the animation finishes.
someLayer.addAnimation(animation, forKey: "myAnimation")
Базовая анимация показывает «слой представления» поверх вашего обычного слоя во время анимации.Так что установите непрозрачность (или что-то еще) на то, что вы хотите видеть, когда анимация заканчивается, и слой представления исчезает.Сделайте это в строке до , добавив анимацию, чтобы избежать мерцания при ее завершении.
Если вы хотите задержать, сделайте следующее:
let animation = CABasicAnimation(keyPath: "opacity")
animation.fromValue = 0
animation.toValue = 1
animation.duration = 0.3
animation.beginTime = someLayer.convertTime(CACurrentMediaTime(), fromLayer: nil) + 1
animation.fillMode = kCAFillModeBackwards // So the opacity is 0 while the animation waits to start.
someLayer.opacity = 1 // <- important, this is the state you want visible after the animation finishes.
someLayer.addAnimation(animation, forKey: "myAnimation")
Наконец, если вы используете'chedOnCompletion = false ', это приведет к утечке CAAnimations, пока слой не будет в конечном итоге удален - избегайте.