文章目录
  1. 1. 透明度
  2. 2. 使用案例
  3. 3. 参考

透明度

UIView———->alpha
CALayer ——->opacity
两者都会影响到自视图

设置图层树统一
在info.plist中设置,整个App都会受影响,iOS6之前(包括iOS6)默认为NO
UIViewGroupOpacity = YES

实现子视图和父视图统一透明效果
CLayer的属性shouldRasterize实现组透明效果设置为YES

“在应用透明度之前,图层及其子图层都会被整合成一个整体的图片,这样就没有透明度混合的问题了”

注意:
在使用shouldRasterize之前,确保设置rasterizationScale属性,默认为1.0, 设置rasterizationScale属性去匹配屏幕,以防止出现Retina屏幕像素化的问题。

iOS 8 之后直接设置父视图自视图透明度随父视图改变

使用案例

在做一个NavigationController push 子页面时,发现push和pop时很卡,研究了一大阵子后,发现在子页面里影响UI流畅的只有UIImageView的圆角设置;然后我就关闭了圆角,重新运行果然流畅多了。但是产品的需求必须加圆角,没办法,去stackoverflow找方案,发现方法都大同小异,只不过是绘制上做一些优化。后来查看layer的头文件,最后找到了一个牛B的属性:
当shouldRasterize设成true时,layer被渲染成一个bitmap,并缓存起来,等下次使用时不会再重新去渲染了。实现圆角本身就是在做颜色混合(blending),如果每次页面出来时都blending,消耗太大,这时shouldRasterize = yes,下次就只是简单的从渲染引擎的cache里读取那张bitmap,节约系统资源。

额外收获:如果在滚动tableView时,每次都执行圆角设置,肯定会阻塞UI,设置这个将会使滑动更加流畅。

持续更新….

参考

http://blog.csdn.net/feixiang_song/article/details/22787417

文章目录
  1. 1. 透明度
  2. 2. 使用案例
  3. 3. 参考