在开发中,添加圆角似乎再常见不过了。不过它带来的性能问题以及离屏渲染问题,也受到部分开发者的注意。
如何才能在不影响性能的前提下添加圆角呢?
相信大家也看过很多博客,写得也很不错,都是这种解决办法。我随便列举几个
- 通过设置
CALayer
的mask
属性来切,这个无法避免离屏渲染,不推荐。 - 通过
UIGraphicsBeginImageContextWithOptions()
创建一个 Image 的图形上下文,在上面绘制 path 并裁剪,最终生成新的UIImage
,这个可行,但是图片尺寸是有限制的,如果 size 过大,会导致内存暴涨,扛不住,直接GG - iOS 9 之后,
UIImageView
设置png格式的图片时,并且没有backgroundColor
时,设置其layer
的cornerRadius
不会触发离屏渲染。
好消息!好消息!WWCD 2018 告诉我们,有 UIGraphicsImageRenderer
这么一个类,它比 UIGraphicsBeginImageContextWithOptions()
这个方法要降低75%的内存消耗!
坏消息是什么?它只支持 iOS 10 以上的版本。
那么 iOS 10 之前,我们只能用 CGBitmapContextCreate()
来创建位图的上下文。其缺点是坐标系的 y 轴是反的,可能不是很习惯,而且切记要 release
我看 SDWebImage 也是这么做的。
我写了几个 Categories ,支持给 UIView
及其子