Ответ
Технически да, но это крайне не рекомендуется для создания полноценного интерфейса. 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.