SmartQuery /ВОПРОС → ПРИМЕР → ПОНЯТНЫЙ ОТВЕТ
Веб-разработка

CALayer: отображение, анимация и конечное состояние

CALayer управляет визуальным содержимым, геометрией и анимацией в Core Animation. UIView обычно имеет связанный слой, а отдельный CALayer можно добавить как sublayer. Утверждение, что слой не имеет представления на экране, неверно: именно слой участвует в отображении, хотя не заменяет обработку событий UIView.

Создание

let box = CALayer()
box.frame = CGRect(x: 20, y: 20, width: 100, height: 100)
box.backgroundColor = UIColor.red.cgColor
view.layer.addSublayer(box)

Явная анимация цвета

let target = UIColor.blue.cgColor
let animation = CABasicAnimation(keyPath: "backgroundColor")
animation.fromValue = box.presentation()?.backgroundColor
    ?? box.backgroundColor
animation.toValue = target
animation.duration = 1.0

CATransaction.begin()
CATransaction.setDisableActions(true)
box.backgroundColor = target
CATransaction.commit()
box.add(animation, forKey: "color")

Явная анимация показывает промежуточное состояние, но сама не сохраняет новое значение свойства model layer. Поэтому конечный цвет записывается отдельно. Иначе после завершения анимации возможен возврат к старому значению; fillMode не должен подменять правильное состояние модели.

Размер и преобразование

Тот же принцип относится к bounds/position. Для поворота можно задать CATransform3DMakeRotation с нужной осью; frame при transform уже не следует использовать как простую независимую геометрию. При изменении layout обновляйте положение слоя согласованно с контейнером.

Проверьте начало, середину и конец анимации, повторный запуск до завершения и настройку Reduce Motion. Слои не предоставляют готовую семантику доступности для новой интерактивной кнопки: для неё нужен подходящий UI-элемент.

Документация