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 <QuartzCore/QuartzCore.h>
yourView.layer.cornerRadius = 12.0f;
【讨论】:
以上是关于CALayer setCornerRadius 仍然在下面留下白色角落的主要内容,如果未能解决你的问题,请参考以下文章
线程 1:EXC_BREAKPOINT CALayer removeAllAnimations 消息发送到 deallocated
如果 CALayer 边界如何独立地 CALayer 图像缩放