更改图像时清除CATiledLayers缓存

pri*_*e31 6 iphone objective-c quartz-graphics

我有一个带有单个子视图的UIScrollView,一个由CATiledLayer支持的UIView.一切正常,只有一个例外:当我将图像从一个更改为另一个时,CATiledLayer会缓存之前的图像缩放级别.在加载更新的图像之前,滚动然后在一瞬间显示旧图像.

有没有办法彻底清除CATiledLayer的缓存,以便它不显示旧图像?CATiledLayer显然知道支持图像已更改,因为它要求它为新图块委托...

zpe*_*esk 24

我认为你让它变得比它需要的复杂一点.我相信你所要做的就是将你的CATiledLayer的内容设置为nil.

myCATiledlayer.contents = nil.
Run Code Online (Sandbox Code Playgroud)

  • 在soca中它警告说修改CATiledLayers内容将有效地将其变成常规CALayer并且确实如此.然而,一位Apple员工告诉我一个诀窍:如果你在最近转换回CALayer-CATiledLayer上调用setNeedsDisplay,那么它将*神奇*转回CATiledLayer. (13认同)
  • 我遇到了与prime31相同的问题,这个解决方案效果很好!在调用[myCATiledlayer setNeedsDisplay]之前我调用了myCATiledlayer.contents = nil,它完成了这项工作.好极了! (3认同)