我正在通过drawInContext()在CALayer子类中渲染一个简单的线条图(中间有一些文本的一行)。我在用户通过调用setNeedsDisplay执行手势时更新此图层。我看到的效果是我可能期望的,如果没有双缓冲进行......即我看到旧渲染的部分新渲染重叠部分。当我停止更新(完成手势)系统“赶上”,我总是看到正确的最终结果,但在更新期间,我看到不一致的结果......这种影响并不微妙,有时甚至是极端的......例如,如果我保持更新速度不够快,我可以在屏幕上保留图纸的陈旧部分秒,同时新零件正在提前绘制...为什么Quartz不会缓冲我的drawInContext()?
我完全不理解这一点。如果Quartz正在进行缓冲,那么它看起来并没有将结果传输到整个屏幕,或者是错误地计算了受影响的区域。
事情我已经尝试:
1)我禁用隐式动画和做所有的绘图的CATransaction
2)我不会让我的画在错误的内...它字面上只是两行之间有一些文字......我没有办法渲染中间文物。
3)我尝试通过跳过大部分更新来限制更新速率......但即使在更低的速率下,我也会看到工件,直到我停止更新并让系统赶上。
4)顺便说一句,这在模拟器和设备(iPad)上发生的情况完全相同。
我是否需要自己绘制屏幕外缓冲区并将其全部复制到屏幕上?我以为我读过Quartz为我做的。
更新: 像往常一样,敲我的头撞在墙上的小时后我找到(部分)答案张贴问题后5分钟。我意识到我正在使用CATiledLayer来让我的图层在缩放时重新渲染。如果我将它切换回普通的CALayer,那么毛刺就会消失。所以我猜我看到了单独的瓷砖渲染的文物。现在,我试图找出如何处理这个...
您可以制作一些简短的示例代码来重现问题吗? – 2010-08-09 00:01:39