2012-05-25 1 views
11

У меня есть UIView с полупрозрачным заполнением и тень. Поскольку заливка является полупрозрачной, я вижу тень за заливом.Как вы видите только тень за пределами поля UIView?

- (id)init 
{ 
    self = [super init]; 
    if (self) { 
     self.backgroundColor = [UIColor colorWithWhite:1.0 alpha:0.8]; 
     self.layer.shadowColor = [UIColor blackColor].CGColor; 
     self.layer.shadowOffset = CGSizeMake(0.0, 0.0); 
     self.layer.shadowOpacity = 0.5; 
     self.layer.shadowRadius = 2.0; 
     self.layer.cornerRadius = 3.0; 
    } 
    return self; 
} 

Мне не нравится такое поведение. Я не вижу ничего позади, потому что непрозрачность заливки + непрозрачность тени> 100%. Как сделать его похожим на CSS, где тень выводится только за пределы рамки?

.someStyle { 
    background: white; 
    opacity: 0.8; 
    box-shadow: 0 0 1em rgba(0,0,0,0.5); 
} 

ответ

-3
self.layer.shadowOffset = CGSizeMake(0.0, 1.0); shadow only on the bottom 
self.layer.shadowOffset = CGSizeMake(1.0, 0.0); shadow only on the right side 
self.layer.shadowOffset = CGSizeMake(1.0, 1.0); shadow on the right and bottom sides. 

смещения тени делает именно то, что он говорит. установить его на 0,0 приведет к отсутствию теней (если ваш вид не прозрачен/полупрозрачен).

+0

Что вы имеете в виду 0,0 результатов без теней? Я вижу тень с 0,0. Источник света перпендикулярен экрану, поэтому я использовал 0,0. – Pwner

+1

если возможно, можете ли вы опубликовать снимок экрана? –

+0

calvinbhai, bau j saras kam karyu .. –

5

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

... 
someLayer.backgroundColor = [[UIColor greenColor] CGColor]; 
someLayer.shadowOpacity = 1.0; 
someLayer.shadowOffset = CGSizeMake(10.0, 10.0); 
someLayer.shadowColor = [[UIColor blackColor] CGColor]; 

someLayer.rasterizationScale = [[UIScreen mainScreen] scale]; 
someLayer.shouldRasterize = YES; 
someLayer.opacity = 0.5; 

[[self layer] addSublayer:someLayer]; 
Смежные вопросы