如何仅在UIView的填充区域外显示阴影?

14

我有一个带有半透明填充和阴影的 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);
}

精确复制:https://dev59.com/R6Dia4cB1Zd3GeqPG6WQ#59092828 - Fattie
1个回答

4
我使用类似以下代码实现了所需的效果:

我能够通过以下方式获得所需的效果:

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

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接