【问题标题】:CATiledLayer and UIScrollView, caching old data for some zoom levelsCATiledLayer 和 UIScrollView,缓存一些缩放级别的旧数据
【发布时间】:2012-05-31 01:16:22
【问题描述】:

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

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

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

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

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

【问题讨论】:

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


    【解决方案1】:

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

    layer.content = nil;
    [layer setNeedsDisplay];
    

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

    【讨论】:

    • 感谢您的提示,我不再为此使用 CATiledLayer,但很高兴知道未来的项目。我会试试看:)。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-01-08
    • 2011-11-15
    • 2012-06-29
    • 2012-06-01
    • 1970-01-01
    相关资源
    最近更新 更多