В чём разница между CoreGraphics и CoreAnimation и когда что использовать?

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

Ответ

CoreGraphics (Quartz 2D) — это низкоуровневый C-API для рисования и работы с 2D-графикой. CoreAnimation — высокоуровневый фреймворк для анимаций и композиции слоев, использующий аппаратное ускорение (GPU).

CoreGraphics (Для кастомного рендеринга):

  • Задачи: Отрисовка векторных фигур, работа с изображениями (масштабирование, обрезка), генерация графики в рантайме.
  • Пример: Рисование красного квадрата в контексте изображения.
    UIGraphicsBeginImageContext(CGSize(width: 100, height: 100))
    defer { UIGraphicsEndImageContext() }
    guard let context = UIGraphicsGetCurrentContext() else { return nil }
    context.setFillColor(UIColor.red.cgColor)
    context.fill(CGRect(x: 0, y: 0, width: 100, height: 100))
    let image = UIGraphicsGetImageFromCurrentImageContext()

CoreAnimation (Для анимаций и UI):

  • Задачи: Анимация свойств слоёв (позиция, прозрачность, трансформация), создание плавных переходов.
  • Пример: Анимация перемещения вью.
    UIView.animate(withDuration: 0.3) {
    view.frame.origin.y += 100
    }

Критерии выбора:

  • Используйте CoreGraphics для статичной или сложной программной отрисовки.
  • Используйте CoreAnimation для любых анимаций или простых визуальных изменений.
  • Их можно комбинировать: нарисовать контент с помощью CoreGraphics в draw(_:) или UIGraphicsImageRenderer, а затем анимировать полученный слой/вью через CoreAnimation.