【发布时间】:2011-01-04 13:51:12
【问题描述】:
我们反复制作 CGLayer,进行处理,然后发布它。这在实时发生了很多。每次制作一个全新的 CGLayer 肯定会有很多开销。所以……
当然,最好保留图层,每次都删除其中的所有数据——而不是从头开始创建一个新图层。
注意:如果您在覆盖所有内容的空白或透明矩形中进行绘制,只会在现有路径之上添加更多数据。
那么,如何真正“擦除”或“重新开始” CGLayer?
有一个函数 CGContextBeginPath(cc) 但令人困惑:它似乎只清除了“那个”路径,它似乎没有将所有 CGLayer 擦除回无数据状态强>.
如何将 CGLayer 返回到无数据状态?有人知道吗?
更新...
事实证明实际上没有办法做到这一点。
经过大量实验,我们确定似乎没有办法清除 CGLayer 中的所有数据(这确实令人失望)。
请注意,添加一个新的白色或透明矩形只是这样做 - 它实际上添加了更多数据。
不幸的是,没有已知的方法可以做到这一点。如果你在高频率下构建这些(也许是为了计算),你每次都必须从一个新的开始。或者,您显然可以使用 CGContextBeginPath() 删除(实际上是删除,而不仅仅是覆盖)只是一个路径。
希望这对将来的某人有所帮助。
【问题讨论】:
-
你好@Joe Blow,我也被这个从 CGlayer 清除数据的问题所困扰,我的问题是,我在一层中擦除并在另一层中写入,所以每当用户在笔和擦除之间切换时,我将一个图层绘制到另一个图层并使用方法CGContextClearRect()清除前一个图层,但是会发生什么,如果我不擦除书写,然后再次单击笔,但不书写然后再次单击擦除,然后尝试擦除,然后所有写入都被清除。我们如何解决这个问题,我的 SO 问题在这里stackoverflow.com/questions/22201208/…