这是我添加到新视图控制器的代码:
- (void)viewDidLoad
{
[super viewDidLoad];
UIView *contentView = [[UIView alloc] initWithFrame:CGRectMake(50, 50, 200, 100)];
[contentView setClipsToBounds:YES];
[contentView setBackgroundColor:[UIColor blueColor]];
[self.view addSubview:contentView];
[[contentView layer] setBorderColor:[[UIColor lightGrayColor] CGColor]];
[[contentView layer] setBorderWidth:1.0f];
[[contentView layer] setCornerRadius:5.0f];
[[contentView layer] setMasksToBounds:YES];
}
结果:
如果看看角落,我们可以看到外面的蓝色像素:
答案 0 :(得分:2)
您可以使用CAShapeLayer:
- (void)viewDidLoad
{
[super viewDidLoad];
UIView *contentView = [[UIView alloc] initWithFrame:CGRectMake(50, 50, 200, 100)];
[self.view addSubview:contentView];
CAShapeLayer *subLayer = [[CAShapeLayer alloc] init];
[subLayer setFillColor:[UIColor blueColor].CGColor];
[subLayer setStrokeColor:[UIColor grayColor].CGColor];
[subLayer setLineWidth:6.0];
[subLayer setPath:[UIBezierPath bezierPathWithRoundedRect:contentView.bounds cornerRadius:5.0].CGPath];
[contentView.layer addSublayer:subLayer];
}
答案 1 :(得分:0)
我怀疑正在发生的是剪裁蒙版被应用于将其约束到角半径的图层,然后在背景图像的那个(顶部)内绘制边框,并且由于一个共同点称为抗锯齿的技术,你可以看到下面的一些像素。抗锯齿是用于尝试防止圆形和棱角线看起来锯齿状的技术。
编辑:
根据我的上一条评论,如果你想将它全部保存在一个视图中,使边框透明或宽度为0(底部为蓝色)以获得圆角,然后创建第二层稍大一点绘制边框,确保视图框大到足以容纳绘制的边框 边界。
答案 2 :(得分:0)
可悲的是,看起来苹果分别用已经圆角相互绘制背景和边框。当使用不同的背景颜色绘制两个相同的圆形rect bezier路径时,可以获得相同的结果。 它是由两个绘制元素的抗锯齿引起的。
迄今为止对我有用的解决方案: 在containerView中使用2个不同的视图。一个带边框,背景清晰,另一个带背景色。 在两个子视图上使用cornerRadius,但背景视图应插入半个像素:
CGRectMake(borderView.frame.origin.x + 0.5,
borderView.frame.origin.y + 0.5,
borderView.frame.size.width - 1.0,
borderView.frame.size.height - 1.0);
这样你就不应该看到边框边缘的抗锯齿像素。