全部,
我无法从 CATiledLayer 获得我想要的行为。有没有一种方法可以触发瓷砖重绘,而不会产生首先将它们的区域清除为白色的副作用?我已经将 CATiledLayer 子类化为将 fadeDuration 设置为返回 0。
更具体地说,以下是我所看到的以及我正在努力实现的目标的详细信息:
- 我有一个内容大小很大的 UIScrollView...~12000x800。它的内容视图是一个由 CATiledLayer 支持的 UIView。
- UIView 使用大量自定义绘制的线条呈现
- 一切正常,但 UIView 的内容有时会发生变化。发生这种情况时,我想尽可能无缝地重绘瓷砖。当我在视图上使用 setNeedsDisplay 时,图块会重新绘制,但它们首先会被清除为白色,并且在绘制新内容之前会有几分之一秒的延迟。我已经对 CATiledLayer 进行了子类化,以便将 fadeDuration 设置为 0。
- 我想要的行为似乎应该是可能的......当您放大滚动视图并且内容以更高分辨率重绘时,重绘之前没有空白;新内容绘制在旧内容之上。这就是我要找的。
谢谢; 我很欣赏你的想法。
更新:
只是跟进 - 我意识到在重绘之前瓷砖没有被清除为白色,它们被完全取出;我看到的白色是我的 CATiledLayer 支持的视图下方的视图颜色。
作为快速破解/修复,我在 UIScrollView 下方放置了一个 UIImageView,在触发 CATiledLayer 支持的视图的重绘之前,我将其可见部分渲染到 UIImageView 中并让它显示。这大大平滑了重绘。
如果有人有更好的解决方案,比如在重绘之前防止重绘目标瓷砖消失,我仍然很想听听。