码迷,mamicode.com
首页 > 其他好文 > 详细

圆角优化

时间:2016-06-22 12:37:22      阅读:132      评论:0      收藏:0      [点我收藏+]

标签:

自观察的巧妙应用

既然要生成圆角图片,首先要解决生成时机问题。可能会有朋友想到swizzle类UIImageView的setImage方法,但我个人并不推 荐,毕竟Swizzle类方法影响范围太广,对于大型开发团队,出问题后很难排查定位问题所在。定义UIImageView子类?实用性不强!

还记得我在文章《“自释放”在iOS开发中的应用》 中提到的实现自释放的三种方式吗?其中一种方式就是动态属性观察者——通过创建一个动态属性KVO被观察对象的某一属性,从而达到自监控的目的。

通过创建动态属性观察者HJImageObserver,监听UIImageView的image属性,当image发生变化时,能够立即触发圆角图片的生成,从而达到自动实现圆角图片替换的目的,具体实现可以参考源码 HJCornerRadius

RunLoop的适当切换

细心的朋友可能注意到,本工具并不是直接渲染原始Image对象,而是先截取UIImageView视图Layer生成的Image,然后再做渲 染。原因很简单,因为UIImageView呈现方式涉及多种ContentMode,通过渲染UIImageView视图Layer生成的图片可以巧妙 的解决UIImageView显示模式的问题

此外,由于系统原因,对于像UITableViewCell的UIImageView,第一次创建赋图时,可能无法获取UIImageView视图Layer的图片,此时,可以通过切换异步RunLoop达到延时渲染的目的

众所周知,截图渲染的逻辑是可以运行在工作线程,但是本工具并没有把它们放在工作线程执行,因为放在工作线程会有延迟,从而导致图片闪烁的现象

具体截图渲染代码如下

经过实际测试验证,效果还是比较理想的,即使需要显示大量圆角图片,显示帧数也可以稳定在50帧以上。CPU消耗影响较小,以iPhone6测试显示,CPU实际消耗上涨不会超过5%,属于合理范围之内


圆角优化

标签:

原文地址:http://www.cnblogs.com/fangjie123/p/5606522.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!