← Назад к вопросам

Какие знаешь способы скругления view?

1.0 Junior🔥 291 комментариев
#UIKit и верстка

Комментарии (1)

🐱
deepseek-v3.2PrepBro AI5 апр. 2026 г.(ред.)

Ответ сгенерирован нейросетью и может содержать ошибки

Методы скругления углов UIView в iOS

В iOS разработке существует несколько основных подходов для скругления углов представлений (UIView), каждый со своими особенностями и сценариями применения.

1. layer.cornerRadius

Наиболее распространённый и простой метод через свойство слоя (CALayer) представления:

view.layer.cornerRadius = 12.0
view.layer.masksToBounds = true // или view.clipsToBounds = true

Ключевые моменты:

  • Изменяет визуальное отображение, но не изменяет фактическую рамку (frame) представления
  • masksToBounds/clipsToBounds обязательны для обрезки содержимого по скруглённым краям
  • Производительность: аппаратно-ускорено начиная с iOS 3.0
  • Ограничение: скругление только всех углов одновременно

2. UIBezierPath с CAShapeLayer

Более гибкий подход для нестандартных форм:

let path = UIBezierPath(
    roundedRect: view.bounds,
    byRoundingCorners: [.topLeft, .topRight],
    cornerRadii: CGSize(width: 20, height: 20)
)

let maskLayer = CAShapeLayer()
maskLayer.path = path.cgPath
view.layer.mask = maskLayer

Преимущества:

  • Можно скруглять отдельные углы (.topLeft, .topRight, .bottomLeft, .bottomRight)
  • Создание сложных форм и масок
  • Возможность анимации изменения формы через CABasicAnimation

3. Core Graphics с draw(_:)

Кастомная отрисовка в методе drawRect::

override func draw(_ rect: CGRect) {
    let path = UIBezierPath(
        roundedRect: rect,
        cornerRadius: 15
    )
    UIColor.blue.setFill()
    path.fill()
}

Когда использовать:

  • Полный контроль над процессом отрисовки
  • Кастомные вью с особой логикой рендеринга
  • Минимизация использования слоёв для производительности

4. UIVisualEffectView для размытого скругления

Для создания современных размытых фонов с скруглением:

let blurEffect = UIBlurEffect(style: .systemMaterial)
let blurredView = UIVisualEffectView(effect: blurEffect)
blurredView.layer.cornerRadius = 16
blurredView.clipsToBounds = true

5. Auto Layout Constraints с cornerRadius

Динамическое скругление при изменении размеров:

override func layoutSubviews() {
    super.layoutSubviews()
    // Автоматическая адаптация радиуса к текущим размерам
    let cornerRadius = min(bounds.width, bounds.height) / 2
    layer.cornerRadius = cornerRadius
}

Особенности:

  • Актуально для кругов (avatarView)
  • Корректная работа с Auto Layout
  • Обработка изменений ориентации устройства

6. IBDesignable/@IBInspectable

Для работы в Interface Builder:

@IBDesignable
class RoundedView: UIView {
    @IBInspectable var cornerRadius: CGFloat = 0 {
        didSet {
            layer.cornerRadius = cornerRadius
            layer.masksToBounds = cornerRadius > 0
        }
    }
    
    @IBInspectable var topCorners: Bool = false {
        didSet {
            if topCorners {
                roundCorners(corners: [.topLeft, .topRight], radius: cornerRadius)
            }
        }
    }
}

Сравнение производительности методов

  1. cornerRadius + masksToBounds — оптимальный баланс производительности и простоты
  2. CAShapeLayer mask — дополнительные аллокации памяти для слоя, но гибкость
  3. Кастомная отрисовка — эффективно для статичных вью, но сложнее в поддержке

Рекомендации по использованию

Для простых случаев: Используйте layer.cornerRadius — это наиболее производительное и поддерживаемое решение.

Для частичного скругления: Применяйте UIBezierPath с CAShapeLayer для контроля над отдельными углами.

Для динамических размеров: Реализуйте обновление радиуса в layoutSubviews().

Для производительности: Избегайте чрезмерного использования масок (masksToBounds) в скроллящихся вью (например, UITableViewCell), так как это может вызывать дополнительный оффскрин-рендеринг.

iOS 13+: Для поддержки тёмной темы убедитесь, что скругление применяется корректно к обоим цветовым схемам.

Выбор метода зависит от конкретных требований: необходимости анимации, поддержки старых версий iOS, сложности формы вью и требований к производительности при рендеринге.

Какие знаешь способы скругления view? | PrepBro