更改图像时清除 CATiledLayers 缓存
Posted
技术标签:
【中文标题】更改图像时清除 CATiledLayers 缓存【英文标题】:Clear CATiledLayers Cache When Changing Images 【发布时间】:2009-08-13 21:24:15 【问题描述】:我有一个带有单个子视图的 UIScrollView,一个由 CATiledLayer 支持的 UIView。除了一个例外,一切都运行良好:当我将图像从一个更改为另一个时,CATiledLayer 会缓存以前的图像缩放级别。在加载更新的图像之前,滚动显示旧图像片刻。
有没有办法完全清除 CATiledLayer 的缓存,使其不显示旧图像? CATiledLayer 显然知道背景图像发生了变化,因为它向它的委托请求新的瓦片......
【问题讨论】:
【参考方案1】:我认为你让这件事变得比它需要的复杂一点。我相信您所要做的就是将 CATiledLayer 的内容设置为 nil。
myCATiledlayer.contents = nil.
【讨论】:
就在 soca 中,它警告说修改 CATiledLayers 的内容会有效地将其变成常规的 CALayer,而且确实如此。然而,一位 Apple 员工确实告诉了我一个技巧:如果您在最近转换回 CALayer-CATiledLayer 上调用 setNeedsDisplay,那么它会神奇地变回 CATiledLayer。 我遇到了和 prime31 一样的问题,这个解决方案效果很好!在调用 [myCATiledlayer setNeedsDisplay] 之前,我调用了 myCATiledlayer.contents = nil,它完成了这项工作。耶! 确保在图层仍在绘制时没有将图层内容设置为 nil,因为应用程序会崩溃。 @Khomsan,相反,我看到 ios 在将内容设置为零之前等待所有线程完成绘制。 @steipete 好的,也许我的应用程序由于其他原因崩溃了,如果我的信息不正确,请见谅。【参考方案2】:-(void)invalidate
CATiledLayer *tiledLayer = (CATiledLayer *)[self layer];
tiledLayer.tileSize = CGSizeMake(93,93);//Set a different tile size
tiledLayer.tileSize = CGSizeMake(92,92);//Restore original tile size
这对我有用。
【讨论】:
以上是关于更改图像时清除 CATiledLayers 缓存的主要内容,如果未能解决你的问题,请参考以下文章