Что такое свойство `transform` в UIKit/Core Animation?

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

Ответ

Свойство transform — это аффинное (2D) или 3D-преобразование, применяемое к слою (CALayer) или представлению (UIView). Оно модифицирует систему координат элемента для визуальных трансформаций без изменения его фактического фрейма (frame).

Основные типы преобразований:

  1. Перемещение (Translation): CGAffineTransform(translationX:y:)
  2. Масштабирование (Scale): CGAffineTransform(scaleX:y:)
  3. Вращение (Rotation): CGAffineTransform(rotationAngle:)

Пример комбинирования 2D-трансформаций:

// Создаем и применяем несколько преобразований
let scaleTransform = CGAffineTransform(scaleX: 0.8, y: 0.8)
let rotateTransform = CGAffineTransform(rotationAngle: .pi / 6) // 30 градусов
let translateTransform = CGAffineTransform(translationX: 50, y: 20)

// Объединяем: сначала масштаб, потом поворот, потом сдвиг
myView.transform = scaleTransform.concatenating(rotateTransform).concatenating(translateTransform)

Пример 3D-трансформации (с перспективой):

var transform = CATransform3DIdentity
transform.m34 = -1.0 / 500.0 // Задает перспективу (точку схода)
transform = CATransform3DRotate(transform, .pi / 4, 1, 0, 0) // Поворот на 45° по оси X
myView.layer.transform = transform

Ключевые особенности:

  • Производительность: Аппаратно ускоряется Core Animation.
  • Анимация: Свойство transform легко анимируется с помощью UIView.animate или CABasicAnimation.
  • Интерактивность: Часто используется для жестов (например, масштабирование пальцами).