IOS добавить/удалить тень из представления

Я не понимаю, как удалить тень, добавленную в представление. Я добавляю к виду в initWithFrame тень следующим образом:

self.layer.borderWidth = 2;
self.layer.borderColor = [UIColor clearColor].CGColor;
self.backgroundColor = [UIColor greenColor];
[self.layer setCornerRadius:8.0f];
CALayer *layer = self.layer;
layer.shadowOffset = CGSizeMake(2, 2);
layer.shadowColor = [[UIColor blackColor] CGColor];
layer.cornerRadius = 8.0f;
layer.shadowRadius = 3.0f;
layer.shadowOpacity = 0.80f;
layer.shadowPath = [[UIBezierPath bezierPathWithRect:layer.bounds] CGPath];

После выполнения приложения я хочу удалить тень из этого представления. Я пробовал использовать:

layer.hidden = YES;

или

self.layer.hidden = YES;

но это полностью скрывает представление, а не только добавленную тень.

Есть ли способ получить добавленную тень из представления, а затем скрыть ее? Спасибо!

Ответ 1

Я думаю, вы могли бы использовать свойство shadowOpacity вашего CALayer.

Итак, это должно работать:

self.layer.shadowOpacity = 0.0;

Смотрите страницу CALayer shadowOpacity

И чтобы показать использование тени:

self.layer.shadowOpacity = 1.0;

Ответ 2

Извините, не уверен правильно, но попытались ли вы изменить свойства layer shadow? Например, один из них:

 layer.shadowOffset = CGSizeMake(0, 0);
 layer.shadowColor = [[UIColor clearColor] CGColor];
 layer.cornerRadius = 0.0f;
 layer.shadowRadius = 0.0f;
 layer.shadowOpacity = 0.00f;

Ответ 3

Swift 4.2

Я использую это в своем коде для ярлыков и панели навигации.

extension UIView {

    func shadow(_ height: Int = 5) {
        self.layer.masksToBounds = false
        self.layer.shadowRadius = 4
        self.layer.shadowOpacity = 1
        self.layer.shadowColor = UIColor.gray.cgColor
        self.layer.shadowOffset = CGSize(width: 0 , height: height)
    }

    func removeShadow() {
        self.layer.shadowOffset = CGSize(width: 0 , height: 0)
        self.layer.shadowColor = UIColor.clear.cgColor
        self.layer.cornerRadius = 0.0
        self.layer.shadowRadius = 0.0
        self.layer.shadowOpacity = 0.0
    }
}

Ответ 4

"слой", который вы пытаетесь сделать скрытым, - это слой объекта, в котором у вас есть тень к нему, не видимый аспект.. только объекты с слоем... это довольно запутанно, чтобы концептуализировать в любом случае, единственный способ удалить тень - это отменить то, что вы изначально сделали, что было предложено выше, нет определенного свойства, которое вы можете просто переключить на bool и убрать тень.