修改圆角个数

作者: ForeverYoung21 | 来源:发表于2015-05-01 22:57 被阅读606次

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

    相关文章

      网友评论

      本文标题:修改圆角个数

      本文链接:https://www.haomeiwen.com/subject/kqybfttx.html