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

Iphone CATiledLayer和UIScrollView,缓存某些缩放级别的旧数据,iphone,objective-c,ios,core-graphics,quartz-2d,Iphone,Objective C,Ios,Core Graphics,Quartz 2d,我设置了一个CATiledLayer,可以动态地重新绘制一些我用Quartz创建的图形 此视图被添加为滚动视图的内容视图,当我滚动和缩放时,图形将以正确的分辨率重新绘制,并完全按照我的预期进行操作 我的问题是,如果我更改了生成图形的值(这是一个类似图形的结构的可视化),然后在视图上显示setNeedsDisplay,这些更改将应用并以某些缩放级别显示,但如果缩小,它将显示生成的旧图形。再次放大会返回到正确的图形 我假设平铺层中的不同缩放级别正在缓存,因此更新不会应用于已缓存的缩放级别 我的问题是

我设置了一个CATiledLayer,可以动态地重新绘制一些我用Quartz创建的图形

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

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

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


我的问题是,如果是这种情况,是否有任何方法可以强制CATiledLayer不从缓存的数据重新绘制?如果没有,有人知道问题的原因吗?

不确定您是否仍然存在此问题,但我最近也遇到过。答案中的问题似乎是将layer.content设置为nil,然后使用setNeedsDisplay或setNeedsDisplayInRect调用刷新。因此,无论您在希望清除视图后在何处调用setNeedsDisplay刷新视图,您都可以使用:

layer.content = nil;
[layer setNeedsDisplay];

这似乎对我有效,但在回答上述链接问题的注释中,有一些警告,禁止直接设置layer.content属性。除了可能删除和重新添加图层之外,我还无法想出任何其他选项。

不确定您是否仍然存在此问题,但我最近自己也遇到过。答案中的问题似乎是将layer.content设置为nil,然后使用setNeedsDisplay或setNeedsDisplayInRect调用刷新。因此,无论您在希望清除视图后在何处调用setNeedsDisplay刷新视图,您都可以使用:

layer.content = nil;
[layer setNeedsDisplay];

这似乎对我有效,但在回答上述链接问题的注释中,有一些警告,禁止直接设置layer.content属性。除了可能删除和重新添加该层之外,我还无法想出任何其他选项。

感谢您的提示,我不再使用CATiledLayer进行此操作,但很高兴了解未来的项目。我将尝试:)。谢谢你的提示,我不再使用CATiledLayer来实现这一点,但很高兴了解未来的项目。我来试试:)。