iphone - CATiledLayer 在绘制内容之前消隐图 block

标签 iphone core-graphics quartz-graphics catiledlayer

全部,

我无法从 CATiledLayer 获取我想要的行为。有没有一种方法可以触发图 block 重绘,而不会产生先将其区域清除为白色的副作用?我已经将 CATiledLayer 子类化以将 fadeDuration 设置为返回 0。

更具体地说,以下是我所看到的以及我想要实现的目标的详细信息:

  • 我有一个内容尺寸很大的 UIScrollView...~12000x800。它的内容 View 是一个由 CATiledLayer 支持的 UIView。
  • UIView 使用大量自定义绘制的线条进行渲染
  • 一切正常,但 UIView 的内容有时会发生变化。当这种情况发生时,我想尽可能无缝地重新绘制图 block 。当我在 View 上使用 setNeedsDisplay 时,图 block 会重新绘制,但它们首先会被清除为白色,并且在绘制新内容之前会有几分之一秒的延迟。我已经对 CATiledLayer 进行了子类化,以便将 fadeDuration 设置为 0。
  • 我想要的行为似乎应该是可能的......当您放大 ScrollView 并且内容以更高分辨率重新绘制时,重绘之前不会出现空白;新内容绘制在旧内容的正上方。这就是我正在寻找的。

谢谢;我很欣赏你的想法。

更新:

只是为了跟进 - 我意识到在重画之前瓷砖并没有被清除为白色,它们被完全取出;我看到的白色是我的 CATiledLayer 支持 View 下方 View 的颜色。

作为快速破解/修复,我将 UIImageView 放在 UIScrollView 下方,在触发 CATiledLayer 支持的 View 的重绘之前,我将其可见部分渲染到 UIImageView 中并让它显示。这可以显着平滑重绘。

如果有人有更好的解决方案,例如在重绘之前防止以重绘为目标的图 block 消失,我仍然很想听听。

最佳答案

我发现,如果您将levelsOfDetailBias和levelsOfDetail设置为相同的值(在我的例子中为2),那么它只会重绘被我的setNeedsDisplayInRect:调用触摸的图 block ,正如您所希望的那样。

但是,如果levelsOfDetail与LODB不同,则对setNeedsDisplayInRect的任何调用:重绘所有图 block 。

关于iphone - CATiledLayer 在绘制内容之前消隐图 block ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1710628/

相关文章:

iphone - 如何在 AVCapture 视频上添加 CALayer 矩形?

iphone - 我如何更改 Core Graphics 中 CALayer 的填充颜色?

iphone - 学习适用于 iPhone 的 Quartz 和/或 openGL 资源?

macos - OSX Quartz 事件点击 : event types and how to edit events

iphone - 加载 ScrollView 的性能不佳

c++ - 在 Box2D 中制作漩涡

ios - 是否可以在 iphone 上的多个应用程序之间共享守护进程?

asp.net - 如何检测移动网络浏览器及其屏幕大小

ios - 声音是来自iphone还是 watch ?

iphone - NSLog 与 CGPoint 数据