【问题标题】:Struggling to clear ALL DATA from a CGLayer -- can it even be done?努力从 CGLayer 中清除所有数据——甚至可以做到吗?
【发布时间】:2011-01-04 13:51:12
【问题描述】:

我们反复制作 CGLayer,进行处理,然后发布它。这在实时发生了很多。每次制作一个全新的 CGLayer 肯定会有很多开销。所以……

当然,最好保留图层,每次都删除其中的所有数据——而不是从头开始创建一个新图层。

注意:如果您在覆盖所有内容的空白或透明矩形中进行绘制,只会在现有路径之上添加更多数据

那么,如何真正“擦除”或“重新开始” CGLayer?

有一个函数 CGContextBeginPath(cc) 但令人困惑:它似乎只清除了“那个”路径,它似乎没有将所有 CGLayer 擦除回无数据状态强>.

如何将 CGLayer 返回到无数据状态?有人知道吗?

更新...

事实证明实际上没有办法做到这一点。

经过大量实验,我们确定似乎没有办法清除 CGLayer 中的所有数据(这确实令人失望)。

请注意,添加一个新的白色或透明矩形只是这样做 - 它实际上添加了更多数据。

不幸的是,没有已知的方法可以做到这一点。如果你在高频率下构建这些(也许是为了计算),你每次都必须从一个新的开始。或者,您显然可以使用 CGContextBeginPath() 删除(实际上是删除,而不仅仅是覆盖)只是一个路径。

希望这对将来的某人有所帮助。

【问题讨论】:

  • 你好@Joe Blow,我也被这个从 CGlayer 清除数据的问题所困扰,我的问题是,我在一层中擦除并在另一层中写入,所以每当用户在笔和擦除之间切换时,我将一个图层绘制到另一个图层并使用方法CGContextClearRect()清除前一个图层,但是会发生什么,如果我不擦除书写,然后再次单击笔,但不书写然后再次单击擦除,然后尝试擦除,然后所有写入都被清除。我们如何解决这个问题,我的 SO 问题在这里stackoverflow.com/questions/22201208/…

标签: iphone cocoa cglayer


【解决方案1】:

一旦你有上下文调用 CGContextClearRect( cc, someRect ) 来清除内容。

【讨论】:

  • 要清楚 Jon,这 并没有 实际上 删除数据。它只是在顶部添加(另一个)清晰的数据片段。
  • 如果问题是如何擦除数据,我不明白为什么这是正确答案。
【解决方案2】:

为什么不用(透明/白色)颜色的矩形填充它? 如果您想使用 clearColor(透明)清除图层,请确保图层不是不透明的。

【讨论】:

  • 备份初始 GState 并在完成后恢复如何?所以这个过程将是 0)创建CGLayer 1)saveGState 2)做你想做的 3)restoreGState 4)清除屏幕 5)从(1)重新启动
  • 嗨 iWat!不要忘记图形状态只涉及笔颜色、线条粗细、背景颜色等 --- 不幸的是不是实际路径和数据!
猜你喜欢
  • 1970-01-01
  • 2016-12-28
  • 2015-07-30
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2018-07-03
  • 2022-08-15
相关资源
最近更新 更多