开发者

iPhone - pushing and pulling a value from a dictionary to a CGlayer

I have a finger painting view that I am implementing undo/redo. All the drawing occurs on a CGLayer called lineLayer.

As soon as the user touches the screen but before any modification is done to the screen, I need to quickly grab the views content and create an undo level.

Obviously saving the view to disk is not an option, because it takes too long. The solution I imagined is to copy the CGLayer to a dictionary, using something like this:

// I copy the开发者_如何学运维 layer as a NSValue
NSValue *layerCopy = [NSValue valueWithBytes:&myLayer objCType:@encode(CGLayerRef)];

I store it on a dictionary

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

later I retrieve it using

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

the problem is that lineLayer is not changed at all by this reading operation. It continues to have the same contents as before.

Am I missing something?

thanks.


Have you considered Core data for managing your objects? I'm asking because Undo/redo comes for free with it?


Have you tried to do a deep copy, like creating a bitmap context from the layer?

0

上一篇:

下一篇:

精彩评论

暂无评论...
验证码 换一张
取 消

最新问答

问答排行榜