修改圆角个数

有的时候我们想要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),而多余的部分则扔掉。

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

相关阅读更多精彩内容

  • 转载:http://www.jianshu.com/p/32fcadd12108 每个UIView有一个伙伴称为l...
    F麦子阅读 6,630评论 0 13
  • 每个UIView有一个伙伴称为layer,一个CALayer。UIView实际上并没有把自己画到屏幕上;它绘制本身...
    shenzhenboy阅读 3,277评论 0 17
  • 在iOS中随处都可以看到绚丽的动画效果,实现这些动画的过程并不复杂,今天将带大家一窥iOS动画全貌。在这里你可以看...
    F麦子阅读 5,303评论 5 13
  • 在iOS中随处都可以看到绚丽的动画效果,实现这些动画的过程并不复杂,今天将带大家一窥ios动画全貌。在这里你可以看...
    每天刷两次牙阅读 8,720评论 6 30
  • “改革”倒逼成长 最近得到新的消息,我们分公司打算通过改革控制风险,将现有的金融物流业务全面缩减,转型成为以基础物...
    飞翔的饼阅读 418评论 1 2

友情链接更多精彩内容