2

我设置了一个 CATiledLayer 来动态重新绘制一些我用 Quartz 创建的图形。

这个视图被添加为滚动视图的内容视图,当我滚动和缩放图形时,它会以适当的分辨率重新绘制,并且完全符合我的预期。

我的问题是,如果我更改生成图形的值(它是类似结构的图形的可视化),然后 setNeedsDisplay 在视图上,更改将应用​​并以某些缩放级别显示,但如果你缩小它会显示生成的旧图形。再次放大会回到正确的图形。

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

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

4

1 回答 1

0

不知道你是否还有这个问题,但我最近自己也遇到过。这似乎与更改图像时清除 CATiledLayers 缓存相同的问题答案似乎是将 layer.content 设置为 nil,然后使用 setNeedsDisplay 或 setNeedsDisplayInRect: 调用刷新。因此,无论您在想要清除视图后调用 setNeedsDisplay 来刷新视图,您都可以使用:

layer.content = nil;
[layer setNeedsDisplay];

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

于 2012-10-18T17:51:53.110 回答