Можно ли построить UI в iOS, используя только CALayer, без UIView?

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

Ответ

Технически да, но это крайне не рекомендуется для создания полноценного интерфейса. CALayer — это низкоуровневый объект Core Animation для отрисовки и анимации.

Проблемы при использовании только CALayer:

  • Отсутствие обработки событий: Слои не отвечают на касания (tap, swipe). Придется реализовывать распознавание жестов вручную.
  • Нет высокоуровневых компонентов: Придется вручную рисовать текст (CATextLayer), изображения (contents), скругления, тени.
  • Сложности с layout: Нет Auto Layout. Позиционирование через frame или bounds вручную.

Пример создания простой "кнопки" на CALayer:

let buttonLayer = CALayer()
buttonLayer.frame = CGRect(x: 20, y: 20, width: 100, height: 44)
buttonLayer.backgroundColor = UIColor.systemBlue.cgColor
buttonLayer.cornerRadius = 8
buttonLayer.borderWidth = 1
buttonLayer.borderColor = UIColor.darkGray.cgColor

let textLayer = CATextLayer()
textLayer.string = "Tap"
textLayer.frame = buttonLayer.bounds
buttonLayer.addSublayer(textLayer)

view.layer.addSublayer(buttonLayer)

Когда это может быть оправдано? Для кастомной, высокопроизводительной анимации или отрисовки. В 99% случаев используйте UIView, который инкапсулирует слой и предоставляет удобный API.