Что происходит с UIView при применении CGAffineTransform с поворотом на 90 градусов?

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

Ответ

Применение трансформации поворота (CGAffineTransform(rotationAngle: .pi / 2)) к UIView изменяет ее визуальное представление и систему координат, но не затрагивает внутреннюю геометрию.

Ключевые эффекты:

  1. Визуальный поворот: Вью отрисовывается повернутой на 90° в координатах своего супервью.
  2. Изменение системы координат: Локальная система координат вью (bounds) также поворачивается. Это влияет на размещение сабвью и обработку касаний.
  3. Изменение frame: Свойство frame (прямоугольник в координатах родителя) становится описывающим минимальный прямоугольник, вмещающий повернутую вью, и его значения меняются.
  4. Сохранение bounds: Свойство bounds (прямоугольник в собственных координатах) и center остаются неизменными.

Пример и вывод:

let view = UIView(frame: CGRect(x: 50, y: 50, width: 100, height: 50))
print("До трансформации - Frame: (view.frame), Bounds: (view.bounds)")
// До трансформации - Frame: (50.0, 50.0, 100.0, 50.0), Bounds: (0.0, 0.0, 100.0, 50.0)

view.transform = CGAffineTransform(rotationAngle: .pi / 2) // 90°
print("После трансформации - Frame: (view.frame), Bounds: (view.bounds)")
// После трансформации - Frame: (75.0, 25.0, 50.0, 100.0), Bounds: (0.0, 0.0, 100.0, 50.0)

Практическое следствие: Для позиционирования и анимации трансформированной вью используйте свойства center и bounds, а не frame, вычисление которого ресурсоемко.