博客> 修改圆角个数
修改圆角个数
2017-12-12 12:56 评论:0 阅读:346 诸葛亮倒骑小毛驴
ios 修改圆角个数

有的时候我们想要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]; }

效果如下:

注意:

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

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

注意:

如果把

rectView.layer.mask = shapeLayer;

换成

[rectView.layer addSublayer:shapeLayer];

会是这样的效果:

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

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

收藏
1
sina weixin mail 回到顶部