- layer.cornerRadius 不会触发离屏渲染,该属性只是对边框和背景颜色起作用,适用于内部没有其他控件的 view。
- CAShapeLayer+UIBezierPath 会触发离屏渲染。
- 最好的方式就是使用 Core Graphics 的方式绘制圆角图片。
- 当然,还是那句话,根据场景来使用,如果界面中圆角的地方不多,第一种方式是最简单快捷,效率最高的。如果用到的圆角很多,那还是使用 Core Graphics 的方式
场景
- cornerRadius+clipsToBounds
- shadow
- group opacity
- mask
UIBlurEffect
AsyncDisplayKit(Texture) 作为主要渲染框架,对于文字和图片的异步渲染操作交由框架来处理。关于这方面可以看我之前的一些介绍
- 对于图片的圆角,使用 CoreGraphics 为图片裁剪圆角
- 对于视频的圆角,由于实时剪切非常消耗性能,我们会创建四个白色弧形的 layer 盖住四个角,从视觉上制造圆角的效果
- 对于 view 的圆形边框,如果没有 backgroundColor,可以放心使用 cornerRadius 来做
- 对于所有的阴影,使用 shadowPath 来规避离屏渲染
- 对于特殊形状的 view,使用 layer mask 并打开 shouldRasterize 来对渲染结果进行缓存
对于模糊效果,不采用系统提供的 - UIVisualEffect,而是另外实现模糊效果(CIGaussianBlur),并手动管理渲染结果
https://zhuanlan.zhihu.com/p/72653360
http://lemon2well.top/2018/08/29/iOS%20%E5%BC%80%E5%8F%91/iOS%E4%B8%AD%E7%9A%84%E5%9C%86%E8%A7%92%E5%A4%84%E7%90%86%EF%BC%88%E7%BB%88%E7%BB%93%E7%AF%87%EF%BC%89/
https://bestswifter.com/efficient-rounded-corner/