CATiledLayer在绘制内容之前消隐拼贴

Gre*_*sur 12 iphone core-graphics quartz-graphics catiledlayer

所有,

我无法从CATiledLayer获得我想要的行为.有没有一种方法可以触发瓷砖重绘而不会产生副作用,即它们的区域首先被清除为白色?我已经将CATiledLayer子类化,将fadeDuration设置为0.

更具体地说,这里是我所看到的以及我正在努力实现的细节:

  • 我有一个内容大小的UIScrollView ... ~12000x800.其内容视图是由CATiledLayer支持的UIView.
  • UIView渲染了很多自定义绘制的线条
  • 一切正常,但UIView的内容有时会改变.当发生这种情况时,我想尽可能无缝地重新绘制瓷砖.当我在视图上使用setNeedsDisplay时,瓷砖会重新绘制,但它们首先会被清除为白色,并且在绘制新内容之前会有一小段时间的延迟.我已经将CATiledLayer子类化,以便将fadeDuration设置为0.
  • 我想要的行为似乎应该是可能的......当您放大滚动视图并且内容以更高的分辨率重绘时,重绘之前没有消隐; 新内容是在旧内容之上绘制的.这就是我在寻找的东西.

谢谢; 我很感激你的想法.

更新:

只是为了跟进 - 我意识到在重绘之前瓷砖没有被清理成白色,它们被完全取出; 我看到的白色是我的CATiledLayer支持的视图下面的视图的颜色.

作为快速入侵/修复,我在UIScrollView下面放置了一个UIImageView,在触发重新绘制CATiledLayer支持的视图之前,我将其可见部分呈现到UIImageView中并让它显示出来.这显着平滑了重绘.

如果有人有更好的解决方案,比如在重新绘制之前保持重绘目标的瓷砖不会消失,我仍然喜欢听到它.

luc*_*ius 1

您可以在现有平铺层后面添加另一个层(可能是 CATiledLayer)。(有点像双缓冲解决方案。)您可以setNeedsDisplay:从几秒钟后触发的计时器调用第二层,以确保该层不会与前层同时重绘。