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

  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。

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • 发现 关注 消息 iOS 第三方库、插件、知名博客总结 作者大灰狼的小绵羊哥哥关注 2017.06.26 09:4...
    肇东周阅读 12,303评论 4 61
  • 最近遇到一个需求,label样式设置如下,并不是四个圆角,而是右上和右下设置圆角。 代码很简单,写一个方法,需要裁...
    陨之希留leo阅读 8,386评论 1 15
  • 可怜以浮华为食品, 小蠓虫在灯下纷坠, 不甘淡如水,还要醉, 而抛下露养的青身。 多少艘艨艟一齐发, 白帆篷拜倒於...
    简书茶馆叶老板阅读 1,813评论 0 8
  • 2017年6月6日 星期二 小雨 今天终于下了一点小雨感觉有点冷。下班回家儿子在家写作业。今天还比较自觉。我回到...
    巭Pro阅读 150评论 0 1
  • 友情比爱情长久 所以我选择了爱情 陪伴比离去幸福 所以我选择了离去 死亡比生命永恒 所以我选择了生命
    Toto_阅读 128评论 0 0