0

NSdataにCGlayerRefとCGcontextRefを保存しましたが、現在のものをカバーするようにすると、poinerのみが保存され、データは保存されていないことがわかりました。そのため、これらのCGlayerRefまたはCGcontextRefをコピーとして作成することはできません(これはすべてdrawRectで行いました)

NSdataはこれらのものを保存できると言う人もいますが、NSvalueは保存できませんが、まったく機能しません。「コピー」を使用しても、これらのデータのコピーを取得できませんでした。

これが私のコードです:

-(void)drawRect:(CGRect)rect {

if(drawCount == 3){

        dataLayer1=[NSData dataWithBytes:& _layerView 

length:sizeof(CGLayerRef)];

   [dataLayer1 retain]; 

               } 



  if (undodo==YES) { 

        _layerView=*(CGLayerRef*)[dataLayer1 bytes]; 



  } 



   currentContext = UIGraphicsGetCurrentContext( ....
4

2 に答える 2

0

ビットマップコンテキストからCGLayerRefを作成し、ビットマップコンテキスト用のバッファーを提供するようにしてください。次に、レイヤーに描画するときに、ビットマップコンテキストのバッキングバッファーに新しいデータが含まれている必要があります。

于 2012-06-28T17:06:02.410 に答える
0

CGLayer は NSValue として保存できます。

CGLayer に連続した描画があり、その一部にしたい場合は、

1.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 から 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;
}
于 2013-10-18T07:52:55.973 に答える