我在CGdRef和CGcontextRef中保存了NSdata,当我让它们覆盖当前的那个时,我发现只保存了poiners而不是数据。 出于这个原因,我不能将这些CGlayerRef或CGcontextRef作为副本。(我在drawRect中完成了所有这些)
为什么?有人说NSdata可以存储这些东西,但NSvalue不能,但是,它根本不起作用,即使我用“复制”,我也没有得到这些数据的副本。
这是我的代码:
- (void)drawRect:(CGRect)rect {
if(drawCount == 3){
dataLayer1=[NSData dataWithBytes:& _layerView
长度:的sizeof(CGLayerRef)];
[dataLayer1 retain];
}
if (undodo==YES) {
_layerView=*(CGLayerRef*)[dataLayer1 bytes];
}
currentContext = UIGraphicsGetCurrentContext( ....
答案 0 :(得分:0)
从位图上下文创建CGLayerRef,并确保为位图上下文提供缓冲区。然后,当您绘制到图层时,您的位图上下文缓冲区应包含新数据。
答案 1 :(得分:0)
CGLayer可以保存为NSValue。
如果您在CGLayer中连续绘图并希望其中的一部分,则应该
1.copy the CGLayer
- (CGLayerRef)copyLayer:(CGLayerRef)layer
{
CGSize size = CGLayerGetSize(layer);
UIGraphicsBeginImageContext(size);
CGContextRef context = UIGraphicsGetCurrentContext();
CGLayerRef copyLayer = CGLayerCreateWithContext(context, size, NULL);
CGContextRef copyContext = CGLayerGetContext(copyLayer);
CGContextDrawLayerInRect(copyContext, CGRectMake(0, 0, size.width, size.height), layer);
UIGraphicsEndImageContext();
return copyLayer;
}
2.CGLayer to NSValue&& NSValue到CGLayer
//CGLayer to NSValue
CGLayerRef copyLayer = [self copyLayer:theLayerYouWantToSave];
NSValue *layerValue = [NSValue valueWithLayer:copyLayer];
//NSValue to CGLayer
theLayerYouWantToRestore = [layerValue layerValue];
3.添加NSValue类别
//NSValue category
+ (NSValue *)valueWithLayer:(CGLayerRef)layer
{
NSValue *value = [NSValue value:&layer withObjCType:@encode(CGLayerRef)];
return value;
}
- (CGLayerRef)layerValue
{
CGLayerRef layer;
[self getValue:&layer];
return layer;
}