iOS开发中使用layer.cornerRadius圆角影响性能的解决办法

在iOS中,对UIView或UIimageVIew使用layer.cornerRadius圆角设置时,会很耗性能,也会影响UI流畅,造成App很卡,当关闭了圆角后,重新运行就会流畅多了。但是产品的需求必须加圆角,没办法,去stackoverflow找方案,发现方法都大同小异,只不过是绘制上做一些优化。后来查看layer的头文件,最后找到了一个牛B的属性

[cpp] view plaincopy

    /* When true, the layer is rendered as a bitmap in its local coordinate 
     * space ("rasterized"), then the bitmap is composited into the 
     * destination (with the minificationFilter and magnificationFilter 
     * properties of the layer applied if the bitmap needs scaling). 
     * Rasterization occurs after the layer's filters and shadow effects 
     * are applied, but before the opacity modulation. As an implementation 
     * detail the rendering engine may attempt to cache and reuse the 
     * bitmap from one frame to the next. (Whether it does or not will have 
     * no affect on the rendered output.) 
     * 
     * When false the layer is composited directly into the destination 
     * whenever possible (however, certain features of the compositing 
     * model may force rasterization, e.g. adding filters). 
     * 
     * Defaults to NO. Animatable. */  
      
    @property BOOL shouldRasterize;  
      
    /* The scale at which the layer will be rasterized (when the 
     * shouldRasterize property has been set to YES) relative to the 
     * coordinate space of the layer. Defaults to one. Animatable. */  
      
    @property CGFloat rasterizationScale;  

view.layer.shouldRasterize = YES(光栅化)的使用

当shouldRasterize设成true时,layer被渲染成一个bitmap,并缓存起来,等下次使用时不会再重新去渲染了。实现圆角本身就是在做颜色混合(blending),如果每次页面出来时都blending,消耗太大,这时shouldRasterize = yes,下次就只是简单的从渲染引擎的cache里读取那张bitmap,节约系统资源。

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

你可能感兴趣的:(iOS开发中使用layer.cornerRadius圆角影响性能的解决办法)