Как определяются позиции sublayers в Core Animation?

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

Ответ

Позиция sublayer определяется через геометрические свойства CALayer:

Основные свойства:

  • frame — прямоугольник в координатах superlayer (вычисляемое свойство)
  • bounds — прямоугольник в собственных координатах
  • position — точка привязки в координатах superlayer
  • anchorPoint — точка нормированных координат (0.0-1.0) внутри bounds

Пример установки позиции:

let sublayer = CALayer()

// Способ 1: Через frame
sublayer.frame = CGRect(x: 20, y: 20, width: 100, height: 100)

// Способ 2: Через position и bounds (рекомендуется для анимаций)
sublayer.bounds = CGRect(x: 0, y: 0, width: 100, height: 100)
sublayer.position = CGPoint(x: 70, y: 70) // Центр при anchorPoint (0.5, 0.5)
sublayer.anchorPoint = CGPoint(x: 0.5, y: 0.5) // По умолчанию

Важные взаимосвязи:

// frame вычисляется как:
frame.origin = position - (bounds.size * anchorPoint)
frame.size = bounds.size

// При изменении frame обновляются position и bounds
// При изменении position или bounds обновляется frame

Рекомендации:

  • Для анимаций используйте position и transform (аппаратное ускорение)
  • Избегайте анимации frame — это приводит к пересчёту position и bounds
  • anchorPoint (0, 0) — верхний левый угол, (1, 1) — нижний правый