CALayer setCornerRadius 仍然在下面留下白色角落

Posted

技术标签:

【中文标题】CALayer setCornerRadius 仍然在下面留下白色角落【英文标题】:CALayer setCornerRadius still leaves white corners underneath 【发布时间】:2012-09-20 05:50:16 【问题描述】:

我正在尝试创建一个简单的渐变,上面带有一个标签,我可以覆盖在 MKMapView 的顶部。我查看了 SO,发现我可以使用 CAGradientLayer 而不是覆盖 UIView 中的 drawRect。我想我会试一试。在我的 viewDidLoad 中,我这样做:

CGRect frame = CGRectMake(self.mapView.frame.origin.x, self.mapView.frame.origin.y, 320.0, 44.0);

CAGradientLayer *gradientLayer = [CAGradientLayer layer];
gradientLayer.frame = frame;
gradientLayer.backgroundColor = (__bridge CGColorRef)((__bridge id)([UIColor clearColor].CGColor));
[gradientLayer setCornerRadius:12.0];
[gradientLayer setOpacity:0.5];

gradientLayer.colors = @[(id)[UIColor blackColor].CGColor, (id)[UIColor whiteColor].CGColor];
[self.view.layer addSublayer:gradientLayer];

它在正确的路径上,除了左上角和右上角有这个白色。是否有一个原因?我想这可能是因为我没有设置图层的背景颜色或其他东西,因为我之前在 UIViews 上发生过这种情况,但看起来不像。

谢谢!

【问题讨论】:

【参考方案1】:

角落下面没有白色。他们在下面有地图。这是四个角,放大了 600%:

当您设置图层的圆角半径时,您正在剪裁该图层。图层下方的任何内容都会显示在您将圆形图层剪掉的位置。

在你的例子中,你已经剪掉了你的渐变层的角,所以下面的地图层不会与渐变混合。

您还需要剪裁地图图层的角。最简单的方法是在地图图层上设置相同的圆角半径。

【讨论】:

【参考方案2】:

你包含这个头文件...

#import <QuartzCore/QuartzCore.h>
#import "QuartzCore/CALayer.h"

然后使用半径。

gradientLayer.layer.cornerRadius = 7.0; 

【讨论】:

【参考方案3】:
    添加QuartzCore.framework #import &lt;QuartzCore/QuartzCore.h&gt; yourView.layer.cornerRadius = 12.0f;

【讨论】:

以上是关于CALayer setCornerRadius 仍然在下面留下白色角落的主要内容,如果未能解决你的问题,请参考以下文章

线程 1:EXC_BREAKPOINT CALayer removeAllAnimations 消息发送到 deallocated

如果 CALayer 边界如何独立地 CALayer 图像缩放

如何将 CALayer 子类化为另一个 CALayer 掩码?

移动CALayer位置完全被超级CALayer封装

如何检测两个 CALayer 是不是重叠?

UIView与CALayer的区别