2

我向 UIView 添加阴影:

[blurView.layer setCornerRadius:kCornerRadius];    
blurView.layer.masksToBounds = NO;
blurView.layer.shadowColor = [[UIColor redColor] CGColor];
blurView.layer.backgroundColor = blurView.layer.shadowColor;
blurView.layer.shadowPath = [UIBezierPath
                             bezierPathWithRoundedRect:CGRectMake(-2.0*kCornerRadius, -2.0*kCornerRadius, blurView.bounds.size.width+4.0*kCornerRadius, blurView.bounds.size.height+4.0*kCornerRadius)
                             cornerRadius:kCornerRadius].CGPath;
blurView.layer.cornerRadius = kCornerRadius;
blurView.layer.shadowOffset = CGSizeMake(0.0, 0.0);
blurView.layer.shadowRadius = kCornerRadius;
blurView.layer.shadowOpacity = kOpacity;
blurView.layer.opacity = 1.0;

这部分代码给了我一个这样的视图,就像一个 uiview 被模糊了:

在此处输入图像描述

当我尝试更改 blurView.layer 的不透明度(例如更改为 0.5)时,我得到了意想不到的视图:

在此处输入图像描述

正如你所看到的 - 我得到了 uiview 的锋利边缘。

我认为,阴影不透明度是图层不透明度的一部分——这是造成这种“错误”的原因。有人可以帮我解决这个问题吗?可能我可以在更改 blurView.layer 的不透明度或类似的东西之前合并图层吗?

UPD

通过此修复:blurView.layer.shadowColor = [[UIColor colorWithRed:1 green:0 blue:0 alpha:0.5] CGColor];

我明白了:

在此处输入图像描述

UPD

答案是使用 setShouldRasterize 方法:

在此处输入图像描述

谢谢大家!

[blurView.layer setShouldRasterize:YES];
4

3 回答 3

3

答案是使用以下代码行:

blurView.layer.shouldRasterize = YES;
于 2011-07-12T07:12:46.067 回答
0

如果你放这个会发生什么:

blurView.layer.shadowOpacity = 1.0;
blurView.layer.opacity = 0.5;

我认为您可能将阴影不透明度设置为 0.5,然后将整个图层设置为 0.5,使阴影透明两倍?

(或者我完全错了!)

于 2011-07-11T16:06:25.363 回答
0

也许你可以试着把这个放进去?

blurView.layer.shadowColor = [[UIColor colorWithRed:1 green:0 blue:0 alpha:0.5] CGColor];
于 2011-07-11T15:35:40.220 回答