CATiledLayer和UIScrollView,缓存一些缩放级别的旧数据

时间:2012-05-31 01:16:23

标签: iphone objective-c ios core-graphics quartz-2d

我有一个CATiledLayer设置为动态重新绘制我正在使用Quartz创建的一些图形。

此视图被添加为滚动视图的内容视图,当我滚动和缩放图形时,将以适当的分辨率重绘并完全按照我的预期进行。

我的问题是,如果我更改生成图形的值(它是图形结构的可视化),然后在视图上设置setNeedsDisplay,则更改将应用​​并在某些缩放级别显示,但如果您缩放它将显示生成的旧图形。再次放大回到适当的图形。

我假设平铺图层中的不同缩放级别正在缓存,因此更新未应用于已缓存的缩放级别。

我的问题是,如果是这种情况,有没有办法强制CATiledLayer不从缓存数据重绘?如果没有,有谁知道可能导致问题的原因是什么?

1 个答案:

答案 0 :(得分:0)

不确定您是否仍然遇到此问题,但我最近自己遇到过这个问题。这似乎与Clear CATiledLayers Cache When Changing Images中的问题相同。答案似乎是将layer.content设置为nil,然后使用setNeedsDisplay或setNeedsDisplayInRect:调用刷新。因此,无论你想要将它清除后调用setNeedsDisplay来刷新视图,你都可以使用:

layer.content = nil;
[layer setNeedsDisplay];

这似乎对我有用,但在上述链接问题的答案的评论中,有警告不要直接设置layer.content属性。除了可能删除和重新添加图层,虽然我还没有能够提出任何其他选项。