您的位置:首页 > 产品设计 > UI/UE

UIImageView设置圆角时产生UI不流畅的解决方案

2015-01-14 11:46 302 查看
转载自: http://blog.csdn.net/zhuangyou123/article/details/8737367
在做一个NavigationController push 子页面时,发现push和pop时很卡,研究了一大阵子后,发现在子页面里影响UI流畅的只有UIImageView的圆角设置;然后我就关闭了圆角,重新运行果然流畅多了。但是产品的需求必须加圆角,没办法,去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;

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

额外收获:如果在滚动tableView时,每次都执行圆角设置,肯定会阻塞UI,设置这个将会使滑动更加流畅。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: