使UIView的特定角变为圆角

7

我做了一些研究,发现没有简单的方法可以只将UIView的右上角和左上角变为圆角,对吧?

ps. 这段代码会将所有4个角变成圆角,这不是我想要的。

  #import <QuartzCore/QuartzCore.h>

 self.layer.cornerRadius = 5;
 self.layer.masksToBounds = YES;

1
https://dev59.com/2m445IYBdhLWcg3wdqEL?rq=1 - Ramaraj T
2个回答

21
您可以使用以下代码片段来实现此操作:
// Set top right & left corners
[self setMaskTo:yourView byRoundingCorners:UIRectCornerTopLeft|UIRectCornerTopRight];

编辑

抱歉,我忘记了这个

- (void)setMaskTo:(UIView*)view byRoundingCorners:(UIRectCorner)corners
{
    UIBezierPath *rounded = [UIBezierPath bezierPathWithRoundedRect:view.bounds
                                                  byRoundingCorners:corners
                                                        cornerRadii:CGSizeMake(8.0, 8.0)];
    CAShapeLayer *shape = [[CAShapeLayer alloc] init];
    [shape setPath:rounded.CGPath];    
    view.layer.mask = shape;
}

PS:正如我在评论中所说的,如果您在显示UITableViewCell单元格时使用类似的东西,我发现最好选择使用背景图像,因为这种绘图方式总是会影响性能。


1
如果您在显示UITableViewCell单元格时使用此类东西,我发现最好选择使用背景图像,因为这种绘图操作总是会影响性能。 - amb
2
这个注释可能应该在答案中说,遮罩视图会对性能造成很大的影响,如果可以的话,应该始终使用背景图片。 - wattson12
谢谢评论,它有效!顺便说一下,我没有将其用作UITableViewcell,即使我是,我也不知道如何使用背景图像来实现这一点... :((( 但还是谢谢。 - user1903992
1
@amb +1 徽章即将到来,回答得很好! - albertamg
我已经尝试过了,但它只能圆化左上角和左下角,而不能适用于其他右下角和右上角。请提供建议。 - Chandni

0

我曾经尝试过对UIView进行扩展,但是它并没有起作用,因为在绘制单元格时会出现问题。

现在我有了更好、更简单的解决方案,只需要两个步骤就可以完美地解决问题 :)

1)一行代码(Swift 2.0)- 它可以将视图的四个角都圆润起来:

YourView.layer.cornerRadius = 10

2) 在Storyboard中,您可以添加一个带有常规角的视图,无需圆角,并根据需要调整约束:

请注意,小的常规角视图应该在主视图后面。在Storyboard中是这样的

在这里,您可以看到小视图所需的约束条件


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接