快速设置UI组件圆角,WyhCornerRadius让你避免离屏渲染

2018-02-09 12:48:36来源:https://www.jianshu.com/p/c273d9503d5b作者:被帅醒的小吴同志人点击

分享






WyhCornerRadius
GitHub : https://github.com/XiaoWuTongZhi/WyhCornerRadius
快速设置视图的圆角;
支持所有继承于UIView的视图;
支持4个方向设置圆角;
支持边框、边框颜色、背景色、背景图;
可自定义圆角度数;
一行代码设置圆角;
避免离屏渲染,简单高效;
初衷

给大家科普一下吧,其实并不是设置圆角就会导致离屏渲染,离屏渲染也并不只是只有圆角才能导致,在iOS11之前只要同时设置圆角maskToBoundsborderWidth时才会导致离屏渲染,iOS11以后系统已经优化兼容了这两个属性所导致的问题,但目前大多数应用还是需要适配11系统以下的,所以设置圆角及边框所导致的离屏渲染问题需要在iOS11以下避免,这就是WyhCornerRadius要干的事。


现在GitHub上虽然已经有不少设置圆角的库,但本人在使用的时候感觉不尽理想,因此结合了诸多作者们的优点,简单写了这个,在这感谢ZYCornerRadius-masterJMRoundedCorner-master开源精神。


在这里简单说说前两个库的优缺点吧,ZYCornerRadius-master一旦引用了类别,以后就会自动设置上圆角了,即使这个时候用户突然不想设置圆角;其次这个库的圆角绘制并不是在异步执行的,因此性能堪忧;但优点很明显,API方法简单,且重写了layoutSubview,这样可支持以后随时赋图,但有一点没看懂的是,没有必要去再设置一个observer去监听setImage,因为KVO其实就是抓的是set方法,如果有必要再去交换一下方法不就好了,layoutSubview一旦被重写,就没必要再去监听setImage了吧,不知道这样理解有没有问题。


JMRoundedCorner-master这个库依赖的文件太多,(YYCacheYYImageYYWebImage) 不过优点很明显啊,圆角绘制是在异步性能很好,可支持的自定义很多(包括圆角的角度,方向等),Demo写的很高大上,不过API方法略显繁琐,最蛋疼的是,UIImageView圆角设置的时候必须同希望最终显示的图片一起赋值,哪怕这是一个网络图片的url,不过本人认为圆角设置更应该像一个属性一样存在,在初始化的时候去设置一遍即可(是属于UI层的),为什么非要将方法写在跟数据层交互的地方呢?很不理解。


对比

传统意义上的圆角边框设置类似于以下的形式,在iOS11以下设备上无疑会产生GPU性能问题 :


img.layer.borderColor = [UIColor redColor].CGColor;
img.layer.borderWidth = 1;
img.layer.masksToBounds = YES;
img.layer.cornerRadius = 20.0f;

WyhCornerRadius设置圆角边框的形式如下,只需要在初始化的时候设置一遍即可,以后随时变换图片都行,所以当然支持SDWebImage网络赋图啦:


[img wyh_autoSetImageCornerRedius:20.0f ConrnerType:(UIRectCornerAllCorners) BorderColor:[UIColor redColor] BorderWidth:1 Image:nil];

性能上的对比其实在iOS11以下特别明显,大家可以到Demo中去查看,在UIImageViewDemo中点击naviBar右上角的按钮即可对比显示未通过WyhCornerRadius设置的性能问题


最近时间比较少,很久没有写东西了,喜欢的帮我点个star,最后欢迎issue我,随时call我(其实这个库也是早都写完的了,一直没时间在简书上说明,正在支持cocoaPods,已经提交了不知道什么时候能搜索到)








最新文章

123

最新摄影

闪念基因

微信扫一扫

第七城市微信公众平台