美文网首页
切指定圆角以及xib自定义view出现的问题

切指定圆角以及xib自定义view出现的问题

作者: 请叫我魔法师 | 来源:发表于2017-08-15 20:46 被阅读0次
    1. 如果切4个圆角可以直接用view.layer.cornerRaidus这个属性,需要设置layer.maskToBounds = YES;
      一把没问题,如果考虑离屏渲染啥的,图片又大又多的话可能造成卡顿。

    2. 可以用UIBezierPath和CAShapeLayer的组合定义mask来达到切圆角的目的,并且而可以指定其中的任意圆角。如下,指定了切左上和右上2个角。
      如下,

    UIBezierPath *cardImgPath = [UIBezierPath bezierPathWithRoundedRect: self.cardImgView.bounds byRoundingCorners:UIRectCornerTopRight | UIRectCornerTopLeft cornerRadii:CGSizeMake(5, 5)];
    CAShapeLayer *cardLayer = [[CAShapeLayer alloc] init];
    cardLayer.path = cardImgPath.CGPath;
    self.cardImgView.layer.mask = cardLayer;
    
    1. 今天用xib自定义了一个view,像往常一样,用上面的代码去切圆角,发现无论设置指定的圆角,它只显示左上角被切了,其余的角没变化。
      通过打印xib中子控件的坐标,发现size都不正常,没和屏幕适配。而且就算把size设置小一些还是不起作用。
      经过思考xib和控制器的关系,在xib显示到控制器显示的时候,其实已经存在了,xib的子控件大小还没和屏幕适配。当设置了xib的frame,通过autoLayout子控件才显示正常。这才看起来正常了。
      所以,在xib加载的时候它需要自动调整才能适配屏幕,autoLayout的时候去切圆角,frame不是确定的,它就没法去切其他的角了。
      所以,指定确定frame就可以了。

    经过上面的一波分析,解决办法就是直接指定rect,不使用view.bounds,如下:

    UIBezierPath *cardImgPath = [UIBezierPath bezierPathWithRoundedRect:CGRectMake(0, 0, size.width, size.height) byRoundingCorners:UIRectCornerTopRight | UIRectCornerTopLeft cornerRadii:CGSizeMake(5, 5)];
    
    

    PS:这个size是在设置xib的frame后计算的。根据自己的实际需求计算size。

    相关文章

      网友评论

          本文标题:切指定圆角以及xib自定义view出现的问题

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