Как вы видите только тень за пределами поля 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);
}
Ответы
Ответ 1
Я смог получить этот желаемый эффект, используя что-то вроде следующего:
...
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];
Ответ 2
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 приведет к отсутствию теней (если ваш вид не прозрачен/полупрозрачен).