1

我有一个正在实施撤消/重做的手指绘画视图。所有的绘图都发生在一个名为 lineLayer 的 CGLayer 上。

一旦用户触摸屏幕但在对屏幕进行任何修改之前,我需要快速抓取视图内容并创建一个撤消级别。

显然将视图保存到磁盘不是一种选择,因为它需要太长时间。我想象的解决方案是将 CGLayer 复制到字典中,使用如下所示:

// I copy the layer as a NSValue
NSValue *layerCopy = [NSValue valueWithBytes:&myLayer objCType:@encode(CGLayerRef)];

我把它存储在字典上

NSString *aKey = [NSString stringWithFormat:@"%d", [number intValue]];
[self.dictUNDO setObject:layerCopy forKey:aKey];

后来我检索它使用

NSString *myKey = [NSString stringWithFormat:@"%d", [number intValue]];
NSValue *myCopy = [self.dictUNDO objectForKey:myKey]; 
[myCopy getValue:&lineLayer];
//lineLayer is the CGLayer where the drawing happens

问题是 lineLayer 根本没有被这个读取操作改变。它继续具有与以前相同的内容。

我错过了什么吗?

谢谢。

4

2 回答 2

0

您是否尝试过进行深度复制,例如从图层创建位图上下文?

于 2011-06-02T18:05:14.660 回答
0

您是否考虑过使用核心数据来管理您的对象?我问是因为撤消/重做是免费的吗?

于 2011-06-02T18:23:56.090 回答