我已经编写了一个应用来测试iOS上的图像性能.我尝试了3种不同的视图,都显示了相同的大PNG.第一个是使用CGContextDrawImage()绘制的视图.第二个设置self.layer.content.第三个是简单的UIImageView.
使用的图像是使用 - [UIImage initWithContentsOfData:]创建的,并在viewController中缓存.每个测试重复分配一个视图,将其添加到视图层次结构中,然后将其删除并释放它.计时从loadView的开始到viewDidAppear,并以fps的形式给出(实际上,每秒视图绘制).
以下是使用912 x 634非标定图像运行5.1的iPad 1的结果:
CGContext: 11 fps
CALayer: 10 fps
UIImageView: 430 fps (!)
Run Code Online (Sandbox Code Playgroud)
我是产生幻觉的吗?看起来UIImageView几乎不可能快速绘制,但我实际上可以看到图像闪烁.我尝试在两个相似的视图之间交换以打败可能的缓存,但帧速率甚至更高.
我一直认为UIImageView只是 - [CALayer setContent]的包装器.但是,分析UIImageView几乎没有时间花在任何我能识别的绘图方法上.
我很想知道发生了什么.非常感激任何的帮助.