Ответ
Работал с Core Animation для создания производительных и сложных анимаций, которые невозможно или неэффективно реализовать через UIView.animate.
Ключевые технологии и задачи:
CALayer: Работа с базовыми слоями,CAShapeLayerдля анимации векторных путей,CAGradientLayer.- Анимации:
CABasicAnimation,CAKeyframeAnimation(включая анимацию по путиpath),CAAnimationGroup. - Транзакции и тайминг:
CATransaction, настройкаtimingFunction(CAMediaTimingFunction). - Переходы:
CATransitionдля кастомных переходов между слоями.
Пример: Анимация движения и изменения цвета с помощью CAKeyframeAnimation.
let positionAnimation = CAKeyframeAnimation(keyPath: "position")
positionAnimation.path = UIBezierPath(ovalIn: bounds).cgPath
positionAnimation.duration = 2.0
positionAnimation.repeatCount = .infinity
let colorAnimation = CABasicAnimation(keyPath: "backgroundColor")
colorAnimation.fromValue = UIColor.red.cgColor
colorAnimation.toValue = UIColor.blue.cgColor
colorAnimation.duration = 2.0
colorAnimation.autoreverses = true
colorAnimation.repeatCount = .infinity
let layer = CALayer()
layer.add(positionAnimation, forKey: "move")
layer.add(colorAnimation, forKey: "colorChange")
view.layer.addSublayer(layer)
Преимущества Core Animation: Высокая производительность (анимации выполняются на GPU), точный контроль над каждым кадром и возможность анимации не-аннимируемых свойств UIView.
Ответ 18+ 🔞
Эх, ну ты глянь, какой серьёзный текст, аж скулы свело. Давай-ка я его так, по-человечьи, перескажу, а то читать — терпения ноль, ебать.
В общем, бывало такое, что стандартные анимации через UIView.animate — это как пытаться на велосипеде через болото проехать. Вроде и крутишь педали, а нихуя не едет, только брызги летят. Вот тут-то и выходит на сцену Core Animation, этакий тяжёлый артиллерист в мире iOS.
Что там у нас в арсенале было, блядь:
CALayer: Это типа фундамент, кирпичики, из которых всё собрано. А если нужна не просто квадратная морда, а что-то фигурное, тоCAShapeLayer— твой лучший друг, чтобы пути векторные анимировать. Ну иCAGradientLayer, чтобы градиентами красиво размазать.- Сами анимации:
CABasicAnimation— это как молоток, простой и понятный.CAKeyframeAnimation— уже целый швейцарский нож, можно по сложному маршруту (path) объект гонять. А если надо всё и сразу, тоCAAnimationGroupв помощь, чтоб не плодить сущности. - Тайминг и прочая магия:
CATransaction— чтоб несколько изменений в одну кучу собрать, аtimingFunction(CAMediaTimingFunction) — чтобы не просто тупо из точки А в точку Б, а с ускорением, замедлением, пружинкой, в общем, красиво. - Переходы:
CATransition— когда надо не просто моргнуть, а сделать вычурный переход между слоями, с кубиками, скольжениями и прочей хуйнёй.
Вот, смотри, живой пример. Делаем шарик, который по кругу бегает и цвет меняет, как хамелеон под кислотой.
// Анимация движения по пути (кругу)
let positionAnimation = CAKeyframeAnimation(keyPath: "position")
positionAnimation.path = UIBezierPath(ovalIn: bounds).cgPath // Вот он, наш круглый маршрут
positionAnimation.duration = 2.0
positionAnimation.repeatCount = .infinity // Бегай, сука, вечно!
// Анимация смены цвета фона
let colorAnimation = CABasicAnimation(keyPath: "backgroundColor")
colorAnimation.fromValue = UIColor.red.cgColor
colorAnimation.toValue = UIColor.blue.cgColor
colorAnimation.duration = 2.0
colorAnimation.autoreverses = true // Чтоб туда-сюда, не просто один раз
colorAnimation.repeatCount = .infinity
// Создаём слой-шарик и навешиваем на него обе анимации
let layer = CALayer()
layer.add(positionAnimation, forKey: "move") // Ключ — просто имя, чтоб потом найти можно было
layer.add(colorAnimation, forKey: "colorChange")
view.layer.addSublayer(layer) // И втыкаем это чудо на вьюху
И в чём же, блядь, кайф? А кайф в том, что вся эта движуха идёт напрямую на видеокарту (GPU), а не грузит центральный процессор. Получается овердохуища плавно и можно анимировать вообще любую хуйню, даже то, что UIView анимировать отказывается наотрез. В общем, мощный инструмент, но и возни с ним, конечно, побольше.