Ответ
Да, можно, но с важными оговорками. Каждый UIView по умолчанию имеет связанный CALayer (view.layer). Однако можно выполнить кастомную отрисовку, минуя этот слой, переопределив метод draw(_:).
Пример ручной отрисовки в Core Graphics:
class CustomView: UIView {
override func draw(_ rect: CGRect) {
guard let context = UIGraphicsGetCurrentContext() else { return }
// Рисуем напрямую в графический контекст
context.setFillColor(UIColor.red.cgColor)
context.fill(CGRect(x: 20, y: 20, width: 100, height: 100))
}
}
Ключевые моменты:
- Слой не исключается: Базовый
CALayerвсе равно существует, но вы рисуете поверх него в контексте. - Производительность: Ручная отрисовка в
draw(_:)может быть менее эффективна, чем использование оптимизированныхCALayerи его свойств (например,backgroundColor,cornerRadius). - Анимации: Реализация анимаций и трансформаций через
draw(_:)сложна. Для анимаций предпочтительнее манипулировать свойствами слоя или использоватьUIView-анимации.