Как устроена иерархия слоев (CALayer) в iOS?

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

Ответ

CALayer образует древовидную иерархию, аналогичную UIView. Каждый слой может иметь одного родителя (superlayer) и множество дочерних слоев (sublayers). Эта иерархия определяет порядок отрисовки (снизу вверх) и преобразование координат.

Базовые операции с иерархией:

let rootLayer = CALayer()
let childLayer1 = CALayer()
let childLayer2 = CALayer()

// 1. Добавление подчиненного слоя
rootLayer.addSublayer(childLayer1)

// 2. Вставка на определенную позицию (индекс 0 — самый нижний)
rootLayer.insertSublayer(childLayer2, at: 0)

// 3. Удаление слоя из иерархии
childLayer1.removeFromSuperlayer()

Важные аспекты:

  • Порядок отрисовки: Слои рисуются в порядке массива sublayers (от 0 к n-1).
  • Система координат: Положение и преобразования дочернего слоя (position, transform) вычисляются относительно системы координат родительского слоя.
  • Управление z-порядком: Помимо порядка в массиве, на видимость влияет свойство zPosition (более высокое значение — «ближе» к наблюдателю).
  • Маскирование: Слой может быть обрезан (masksToBounds = true) границами родительского слоя.

Иерархия слоев — фундамент для анимаций и сложного рендеринга в Core Animation.