我有一个圆角和阴影的UIView,实现和工作。但UIView的背景颜色是白色,令人厌烦。所以我想放一个渐变层作为背景。下面的标签,按钮,最重要的是,使它的圆角仍然显示。
CAGradientLayer *gradient = [CAGradientLayer layer];
gradient.frame = subHudView.bounds;
gradient.colors = [NSArray arrayWithObjects:(id)[[UIColor blackColor] CGColor], (id)[[UIColor whiteColor] CGColor], nil];
[subHudView.layer addSublayer:gradient];
subHudView.layer.cornerRadius = 8;
subHudView.layer.masksToBounds = NO;
subHudView.layer.shadowOffset = CGSizeMake(-5, 5);
subHudView.layer.shadowRadius = 8;
subHudView.layer.shadowOpacity = 0.75;
这是我的代码,因为我试图实现它,但梯度层是在视图中已知的一切之上。如何使渐变在所有控件和标签下进行?每一个响应的帮助都将被感谢。
发布于 2011-11-26 03:01:44
当你addSublayer:
它时,在所有子层的顶部添加该层。
你可能应该使用这样的东西来代替:
[subHudView.layer insertSublayer:gradient atIndex:0];
这样一来,CAGradientLayer
就会低于其他任何东西。
发布于 2018-11-26 22:41:06
在Swift中:
let gradientLayer = CAGradientLayer()
gradientLayer.cornerRadius = 20.0
发布于 2011-11-26 03:06:14
添加到视图中的图层(addSublayer
)绘制在视图自己的图层前面,视图的所有绘制都在该图层中进行。你想要的是将渐变绘制到你自己的视图图层中。为此,在您的视图中实现+layerClass
,指定您希望视图的图层是渐变视图。
因此,例如(在视图自己的代码中):
+(Class)layerClass {
return [CAGradientLayer class];
}
-(void)awakeFromNib {
[super awakeFromNib];
CAGradientLayer* layer = (CAGradientLayer*)self.layer;
layer.colors = [NSArray arrayWithObjects:(id)[[UIColor blackColor] CGColor], (id)[[UIColor whiteColor] CGColor], nil];
layer.cornerRadius = 8;
layer.masksToBounds = NO;
layer.shadowOffset = CGSizeMake(-5, 5);
layer.shadowRadius = 8;
layer.shadowOpacity = 0.75;
}
然而,如果你随后实现了drawRect:,你当然会抹去你的渐变和圆角。有办法绕过这一点。
https://stackoverflow.com/questions/8273229
复制相似问题