今天做了视图的圆角设置测试,分别测试了 imageview,label,uiview,button。
以上视图可简单分成两个类别:imageview,label ,需设置masktobouds才能使圆角可见;uiview,button并不需要设置masktobounds 即可获得圆角效果。
label其实自带有圆角类型,所以大部分业务并不需要手动设置圆角。
至于uiview和button ,及时设置了cornerRadius,帧率的影响并不是非常大。
主要针对imageview的相关做一些记录。
经过试验,找到相对有效的解决办法是 异步重绘图片,然后通过主线程更新UI。
而大部分时间我们都会结合SDWebimage 使用,结合源码我们大可以在downloadOperation中 ,重绘bitmap成功后剪切一份圆形图片保存至本地,同时读取缓存前判断cornerRadius的值,如果该属性为width的一半,则读取之前保存的圆形图片。但是这种方式局限了只能视图只能为圆形。
如果只是设置一定数值的圆角(非圆形),则在category中异步重绘就可以了。
另外在试验过程中,发现图片部分会影响imageview的 Color Blended Layers,查过一些资料后说图片的alpha会对视图混合造成影响,所以我猜测这就是 SDWebimahe里边 response成功过后,仍然用bitmap重绘一次的原因,避免图层混合的问题。还有可能是使用bitmap 性能更优。