2013-05-25 10 views
7

Nie rozumiem, jak usunąć cień dodany do widoku. dodaję do mojego widoku w initWithFrame cień w ten sposób:Dodawanie i usuwanie cieni przez iOS z widoku

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]; 

Po w realizacji aplikacji Chcę usunąć cień z tym poglądem. Próbowałem przy użyciu:

layer.hidden = YES; 

lub

self.layer.hidden = YES; 

ale to ukrywa widok całkowicie, a nie tylko dodatkowy cień.

Czy istnieje sposób na odzyskanie dodanego cienia z widoku, a następnie jego ukrycie? Dzięki!

+2

Czy istnieje powód? deklarujesz lokalną zmienną 'layer' wskazującą na' self.layer' w środku twojego kodu? –

+0

Czytałem, że mogłoby być lepiej z powodu wydajności zadeklarować shadowPath z UIBezierPath, prawda? istnieje najlepsza praktyka, aby to zrobić? –

Odpowiedz

17

Myślę, że można użyć właściwości shadowOpacity swojej CALayer.

Tak to powinno działać:

self.layer.shadowOpacity = 0.0; 

Zobacz CALayer's shadowOpacity documentation page

i pokazać korzystania shadow:

self.layer.shadowOpacity = 1.0; 
+0

Bardzo przydatne dzięki nie rozważam tej opcji, ale może wpłynąć na zmianę wydajności tego obiektu docelowego, a następnie spróbować zdecydowanie usunąć? –

6

Niestety, nie pewny poprawnej sposób , ale masz próbował zmienić właściwości layer shadow? Na przykład jeden z nich;

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

„warstwa”, które starają się uczynić ukryta jest warstwa obiektu, które mają cień na to nie jest widoczny aspekt .. tylko obiekty ze w warstwie ... to raczej mylące do konceptualizacji w każdym razie, jedynym sposobem na usunięcie cienia jest cofnięcie tego, co pierwotnie zrobiłeś, co zostało zasugerowane powyżej, nie ma zdefiniowanej właściwości, którą możesz po prostu przełączyć bool i sprawić, że cień zniknie

Powiązane problemy