Что делает UIView layer.masksToBounds, если установлено в YES?

Кто-нибудь знает? Я нашел несколько ответов, но они были слишком сложными и слишком глубокими. Мне нужен простой ответ.

3 ответа

Решение

Если masksToBounds для свойства установлено значение YES, любые подслои слоя, выходящие за его границы, будут обрезаны до этих границ. В этом случае думайте о слое как о окне на его подслои; все, что находится за пределами окна, не будет видно. когда masksToBounds НЕТ, отсечение не происходит, и любые подслои, которые выходят за пределы границ слоя, будут видны целиком (до тех пор, пока они не выходят за границы любого суперслоя, для которого включена маскировка).

Дизайн ввода в раскадровке

      @IBOutlet weak var purpleView: UIView!  // view inside super view
@IBOutlet weak var yellowView: UIView!  // super view

override func viewDidLoad() {
    super.viewDidLoad()

    yellowView.layer.cornerRadius = 20
    yellowView.layer.masksToBounds = true
    
    // Do any additional setup after loading the view.
}

вывод после maskToBounds = true. Суперпредставление обрезает часть подпредставления, которая находится вне супервизора.

iOS UIView.clipsToBounds CALayer.masksToBounds

[КАСлой]

[CALayer.маска]

= применяетсяmaskчто равноboundaries+cornerRadius

clipsToBoundsи эквивалентны

по умолчаниюfalseименно поэтому все подслои способны выходить за границы [About] . Когда он являетсяtrueвсе подслои обрезаются (учитывается радиус угла). Обратите внимание, что подслои

  • слои подпредставления
  • подслои текущего слоя
  • тени

Пример:

== ложь:

masksToBounds== правда:

границы против рамки: повернуть на 45 градусов

Для отладки из Xcode v11.4

      Debug View Hierarchy 
 - show layers: Editor -> Show Layers
 - show as it was: Editor -> Show Clipped Content
Другие вопросы по тегам