修改圆角个数

有的时候我们想要view变成圆角,实现起来很简单:

rectView.layer.cornerRadius = 20.0f;

这样rectView的四个角都变成圆角了。但是有的时候我们并不想让四个角都变成圆角,我们只想要上面的两个角变成圆角,这个该怎么实现呢?

答案是我们创建一个CAShapeLayer并将其设置为rectView的mask,设置这个CAShapeLayer的path属性为一个UIBezierPath,在创建UIBeizierPath的时候设置我们想要变换的角。例子如下:

- (void)viewDidLoad
{
    [super viewDidLoad];
    
    [self addRectView];
}

- (void)addRectView
{
    UIView *rectView = [[UIView alloc] initWithFrame:CGRectMake(0, 0, 150, 100)];
    rectView.center = self.view.center;
    rectView.backgroundColor = [UIColor purpleColor];
    UIRectCorner rectCorner = UIRectCornerTopLeft | UIRectCornerTopRight;
    UIBezierPath *path = [UIBezierPath bezierPathWithRoundedRect:rectView.bounds
                                               byRoundingCorners:rectCorner
                                                     cornerRadii:CGSizeMake(20, 20)];
    CAShapeLayer *shapeLayer = [CAShapeLayer layer];
    shapeLayer.path = path.CGPath;
    rectView.layer.mask = shapeLayer;
    [self.view addSubview:rectView];
}

效果如下:

修改圆角个数_第1张图片

注意:

UIBezierPath *path = [UIBezierPath bezierPathWithRoundedRect:rectView.bounds
                                           byRoundingCorners:rectCorner
                                                 cornerRadii:CGSizeMake(20, 20)];

如果把rectView.bounds,换成rectView.frame是不能达到这个效果的。


注意:

如果把

rectView.layer.mask = shapeLayer;

换成

[rectView.layer addSublayer:shapeLayer];

会是这样的效果:

修改圆角个数_第2张图片

也就是说当我们设置layer.mask属性(图层蒙版)的时候,会截去mask之外的部分。而只是addSublayer是没有这种效果的。

我理解mask属性,就像我们做饼干的时候,有一个小熊形状的模具(mask),原本有一个长方形的饼干(rectView.layer),把模具按在饼干上,最后得到的是一个小熊形状的饼干(rectView.layer.mask),而多余的部分则扔掉。

你可能感兴趣的:(修改圆角个数)