Какие ресурсы использует Core Animation для рендеринга?

«Какие ресурсы использует Core Animation для рендеринга?» — вопрос из категории UIKit, который задают на 10% собеседований IOS Разработчик. Ниже — развёрнутый ответ с разбором ключевых моментов.

Ответ

Core Animation — это высокоуровневый графический движок, который делегирует основную работу по рендерингу графическому процессору (GPU), используя CPU для управления.

Основные ресурсы и их роль:

Ресурс Назначение в Core Animation
GPU Основной ресурс. Выполняет аппаратно-ускоренные операции:
• Композитинг слоёв (CALayer)
• Геометрические трансформации (поворот, масштаб)
• Работа с прозрачностью и альфа-каналом
• Растеризация (где необходимо)
CPU Управляющие задачи:
• Вычисление ключевых кадров анимации (interpolation)
• Обработка делегатов и completion-блоков
• Управление иерархией слоёв (CALayer tree)
• Обработка touch-ивентов, связанных с анимацией
RAM (Память) Хранение:
• Bitmap-представлений (backing store) слоёв
• Атрибутов слоёв (frame, contents, etc.)
• Контекстов для offscreen-рендеринга

Пример создания анимации:

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

// Анимация будет исполняться на GPU
let animation = CABasicAnimation(keyPath: "position.x")
animation.fromValue = 50
animation.toValue = 200
animation.duration = 2.0
layer.add(animation, forKey: "moveAnimation")

Оптимизация производительности:

  • Избегайте offscreen rendering: Сложные маски, тени с shadowPath могут форсировать растеризацию на CPU. Указывайте shadowPath для слоя.
  • Используйте shouldRasterize с умом: Включение этого свойства для сложных, но статичных слоёв кэширует их результат в bitmap, что ускоряет композитинг. Не используйте для анимируемых слоёв.