2013-01-08 15 views
6

Witam chciałbym dodać CALayer Cień do widoku, w którym cień został lewej i prawej stronie widoku najprostszym sposobem było:cień po lewej i prawej UIView

someView.layer.shadowColor = [[UIColor blackColor] CGColor]; 
someView.layer.shadowOffset = CGSizeMake(0.0f,0.0f); 
someView.layer.shadowOpacity = 1.0f; 
someView.layer.shadowRadius = 10.0f; 
someView.layer.shadowPath = [[UIBezierPath bezierPathWithRect:someView.bounds] CGPath]; 

ale dodam większy cień jako jak cień, gdy zwiększam cieńRadius, to nie wygląda dobrze. Jak mogę zrobić cień, który wygląda dobrze na lewo i prawo.

Odpowiedz

26

Myślę 10 jest dość duży promień cień, spróbuj 3 lub 4, a nie, również krycie Zwykle używam 0,7:

someView.layer.shadowColor = [[UIColor blackColor] CGColor]; 
someView.layer.shadowOffset = CGSizeMake(0.0f,0.0f); 
someView.layer.shadowOpacity = 0.7f; 
someView.layer.shadowRadius = 4.0f; 

Jeśli chcesz cień tylko na lewo i prawo, a następnie włóż prostokąta na górna i dolna więc na górnym i dolnym cieniem są ukryte za widoku:

CGRect shadowRect = CGRectInset(someView.bounds, 0, 4); // inset top/bottom 
someView.layer.shadowPath = [[UIBezierPath bezierPathWithRect:shadowRect] CGPath]; 

nie jestem pewien, czy to jest to, czego chciał.

+0

Rozmawiałem z moim projektanta ten cień jest niewielki. Potrzebuję różnych przesunięć x po lewej i prawej stronie. – Zeropointer

+0

Niesamowita odpowiedź, ale faceci mają kogoś, kto zaimplementował to z zaokrąglonymi narożnikami (bardziej gładko), ponieważ ten prostokątny cień wygląda źle. Wszelkie spostrzeżenia? Z góry dziękuję ! :) –

+0

Użyj bezierPathWithRoundedRect zamiast – progrmr

0

Odpowiedź progrmr była bardzo pomocna, na zdrowie!

Zrobiłem wysunięte menu i miałem problem z cieniem otaczającym mój VC i zakłócaniem paska nawigacyjnego. Okazało się, że musiałem wstawić warstwę cienia.

Oto moje rozwiązanie z wykorzystaniem swift:

rightViewController!.view.layer.shadowOpacity = 0.8 
rightViewController!.view.layer.shadowOffset = CGSizeMake(0, 3) 
rightViewController!.view.layer.shadowRadius = 4.0 

let shadowRect: CGRect = CGRectInset(rightViewController!.view.bounds, 0, 4); // inset top/bottom 
rightViewController!.view.layer.shadowPath = UIBezierPath(rect: shadowRect).CGPath 
4

Swift 3.0 wersja

imageView.layer.shadowOpacity = 0.8 
imageView.layer.shadowOffset = CGSize(width: 0, height: 3) 
imageView.layer.shadowRadius = 4.0 

let shadowRect: CGRect = imageView.bounds.insetBy(dx: 0, dy: 4) 
imageView.layer.shadowPath = UIBezierPath(rect: shadowRect).cgPath 
Powiązane problemy