UIImageView渲染gif的原理应该是使用CAKeyframeAnimation来配置layer的contents属性,我用layer也能实现gif的渲染,并且跟使用UIImageView的性能差不多,而且UIImageView的animationImages和CAKeyframeAnimation的values属性都是copy的,这样就不能使用放在缓存里的已经解码过的图片来渲染gif的frame,导致有的时候滚动到含有gif的cell会抽一下。
额,有些新手朋友大概不知道,UIImage内部是使用Image I/O来解码图片的,但是这个解码如果不强制执行的话,只有在要渲染的时候才会进行解码,如果保留UIImage指针的话,之后使用这个UIImage来渲染图片就不需要解码了,只需要渲染,所以静态图片只要解码过一次可以很快地渲染,但是gif动画就不行了,因为在给UIImageView或者layer提供gif的时候不是retain是copy过去的,这样就用不了之前已经解码过的图片数据了,额,我感觉这个应该是有意这么做的,可能是怕开发者乱渲染gif导致内存太高进而导致应用被杀死。
因为是copy的,提前强制解码也不好使了,我看百度贴吧的iOS应用是直接放弃gif了,网页版的gif到了手机上就全是静态的了。。。。我估摸着他们也遇到了同样的问题。
有没有iPhone上的应用渲染gif这块儿做的不错的?有人知道吗?非常感谢
额,有些新手朋友大概不知道,UIImage内部是使用Image I/O来解码图片的,但是这个解码如果不强制执行的话,只有在要渲染的时候才会进行解码,如果保留UIImage指针的话,之后使用这个UIImage来渲染图片就不需要解码了,只需要渲染,所以静态图片只要解码过一次可以很快地渲染,但是gif动画就不行了,因为在给UIImageView或者layer提供gif的时候不是retain是copy过去的,这样就用不了之前已经解码过的图片数据了,额,我感觉这个应该是有意这么做的,可能是怕开发者乱渲染gif导致内存太高进而导致应用被杀死。
因为是copy的,提前强制解码也不好使了,我看百度贴吧的iOS应用是直接放弃gif了,网页版的gif到了手机上就全是静态的了。。。。我估摸着他们也遇到了同样的问题。
有没有iPhone上的应用渲染gif这块儿做的不错的?有人知道吗?非常感谢