更改 UIView backgrundColor 重置圆角
Posted
技术标签:
【中文标题】更改 UIView backgrundColor 重置圆角【英文标题】:Change UIView backgrundColor reset round corners 【发布时间】:2017-08-09 13:09:24 【问题描述】:我需要更改自定义类按钮的背景颜色,由 UIView
和 UIButton
组成。
- (instancetype)initWithFrame:(CGRect)frame color:(UIColor*)color imageName:(NSString*)imageName target:(id)target action:(SEL)action tag:(int)tag
self = [super init];
if (self)
self.frame = frame;
CircleStatusView * view = [[CircleStatusView alloc]initWithFrame:self.bounds color:color];
view.tag = 22;
[self addSubview:view];
UIButton* btn = [UIButton buttonWithType:UIButtonTypeCustom];
btn.frame = self.bounds;
[btn setBackgroundColor:[UIColor clearColor]];
[btn setImage:[[UIImage imageNamed:imageName]imageWithRenderingMode:UIImageRenderingModeAlwaysTemplate] forState:UIControlStateNormal];
[btn addTarget:target action:action forControlEvents:UIControlEventTouchUpInside];
[btn setTintColor:[UIColor whiteColor]];
btn.tag = tag;
[self addSubview:btn];
return self;
当使用此方法按下UIButton
时,我会更改UIView
的背景颜色。我从灰色变为绿色:
- (void)changeBackgroundColor:(UIColor*)color
[(CircleStatusView*)[self viewWithTag:22] setBackgroundColor:color];
CircleStatusView 是这样制作的:
- (instancetype)initWithFrame:(CGRect)frame color:(UIColor*)color
self = [super init];
if (self)
self.frame = frame;
self.layer.borderColor = [UIColor whiteColor].CGColor;
self.layer.borderWidth = 3;
self.backgroundColor = color;
self.clipsToBounds = YES;
self.layer.masksToBounds = NO;
self.layer.cornerRadius = frame.size.width/2;
self.layer.shadowColor = [UIColor darkGrayColor].CGColor;
self.layer.shadowOffset = CGSizeMake(0, 2);
self.layer.shadowOpacity = 1;
self.layer.shadowRadius = 1.0;
return self;
我的问题是视图的角半径消失了,视图变成了正方形而不是保持圆形,如下所示:
【问题讨论】:
【参考方案1】:我调用的是 setBackgroundColor: 而不是 changeBackgroundColor:,愚蠢的错误
【讨论】:
以上是关于更改 UIView backgrundColor 重置圆角的主要内容,如果未能解决你的问题,请参考以下文章
在另一个自定义 UIView 中设置/更改嵌套自定义 UIView 的变量
更改 UIView 框架大小不会更改 UITableview 框架原点 y