当使用 shadowPath 并将 shadowRadius 设置为 0 时,为什么我的 CALayer 阴影在视网膜显示器上变得模糊?

jas*_*ori 5 shadow calayer ios retina-display

我有一个按钮,我正在添加一个阴影,如下所示:

b.backgroundColor = [UIColor colorWithRed:0.820 green:0.878 blue:0.941 alpha:1.000];
b.layer.cornerRadius = 3;
b.layer.shadowOffset = CGSizeMake(2, 2);
b.layer.shadowOpacity = 0.2;
b.layer.shadowRadius = 0;
Run Code Online (Sandbox Code Playgroud)

这很好用:

没有阴影路径的视网膜阴影

如果我像这样使用阴影路径:

b.layer.shadowPath = [UIBezierPath bezierPathWithRoundedRect:b.bounds cornerRadius:b.layer.cornerRadius].CGPath;
Run Code Online (Sandbox Code Playgroud)

视网膜设备上的阴影模糊:

在此处输入图片说明

它在非视网膜设备上很好,如果shadowRadius不为零似乎可以正常工作。我试过将contentsScale和设置rasterizationScale为 2 但它不影响阴影。

还有其他想法吗?

Bar*_*ski 5

从 iOS 9.0 开始, 的contentsScale属性CALayer也会影响 的光栅化比例shadowPath。换句话说,将图层设置contentsScale为屏幕比例将解决您的问题。