it-swarm.com.ru

Как работает clipsToBounds?

Я хотел бы знать, как использовать свойство UIViewclipsToBounds.

Официальная документация гласит следующее:

clipsToBoundsproperty

Логическое значение, определяющее, ограничены ли подпредставления для границы зрения.

Обсуждение
Установка этого значения в YES заставляет подпредставления обрезаться до границы получателя. Если установлено значение NO, подпредставления, кадры которых расширяются за видимые границы приемника не обрезается. По умолчанию значение NO.

Но мне неясно, что именно это означает. Как я должен использовать clipsToBounds? Каковы последствия установки этого свойства на YES точно? Или NO?

92
Tosh

Если мое суперпредставление представляет собой блок размером 10 единиц с каждой стороны, а мое подпредставление имеет ширину 20 единиц, а для clipsToBounds установлено значение YES, я буду видеть только ту часть подпредставления, которая соответствует границам суперпредставления. В противном случае, если для clipsToBounds установлено значение NO, я буду видеть все подпредставление, даже части вне суперпредставления (при условии, что мы все еще на экране).

В качестве наглядного примера рассмотрим следующие представления, настроенные на раскадровке:

enter image description here

Это белая UIView, метка в верхнем левом углу с простым «1» или «2», так что я могу обсуждать их как view1 или view2. Кроме того, черный вид имеет такой же размер, как и белый, но его источник находится в центре белого вида.

В методе viewDidLoad контроллера представления у нас есть следующий код:

Objective-C:

- (void)viewDidLoad {
    [super viewDidLoad];
    self.view1.clipsToBounds = YES;
    self.view2.clipsToBounds = NO;
}

Swift:

override func viewDidLoad() {
    super.viewDidLoad()
    self.view1.clipsToBounds = true
    self.view2.clipsToBounds = false
}

Когда мы запускаем код и смотрим в симулятор или на устройство, мы получаем следующие результаты:

enter image description here

Таким образом, несмотря на то, что эти представления настраиваются одинаково (за исключением clipsToBounds), они выглядят по-разному. Это то, что делает clipsToBounds. Установка его в YES даст верхний результат, а установка в NO - нижний результат.

Если мы отладим иерархию представлений, мы сможем более четко увидеть, что черные ящики действительно простираются за границы белого представления, но только представление 2 показывает это, когда приложение действительно работает:

enter image description here

243
nhgrif

uiview и текстовое поле с тенью Swift 4

self.txtCurrent.layer.shadowOpacity = 0.5
self.txtCurrent.layer.shadowOffset = CGSize(width: 1.0, height: 1.0)          
self.txtCurrent.layer.shadowRadius = 5.0
self.txtCurrent.layer.shadowColor = UIColor.black.cgColor
self.txtCurrent.layer.masksToBounds = false

взгляд с тенью

self.yourview.layer.shadowOpacity = 0.5
self.yourview.layer.shadowOffset = CGSize(width: 1.0, height: 1.0)
self.yourview.layer.shadowRadius = 5.0
self.yourview.layer.shadowColor = UIColor.black.cgColor
self.yourview.layer.masksToBounds = false
0
Shakeel Ahmed