2012-05-31 4 views
0

Я сохранил CGlayerRef и CGcontextRef в NSdata, и когда я получу их для покрытия текущего, я обнаружил, что сохранены только пуайнеры, но не данные. По этой причине я не могу сделать это CGlayerRef или CGcontextRef как копия. (Я сделал все это в DrawRect)Почему CGlayerRef или CGcontextRef не могут быть сохранены в NSdata?

Почему? Некоторые говорили, что NSData может хранить эти вещи, но NSvalue не может, но, это работа доцента вообще, я не получал копии этих данных, даже я использовал «копию».

Вот мой код:

- (Недействительными) DrawRect: (CGRect) Прямоугольник {

если (drawCount == 3) {

 dataLayer1=[NSData dataWithBytes:& _layerView 

длина: SizeOf (CGLayerRef)];

[dataLayer1 retain]; 

       } 



    if (undodo==YES) { 

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



    } 



    currentContext = UIGraphicsGetCurrentContext(.... 

ответ

0

Создайте свой CGLayerRef из контекста растрового изображения и убедитесь, что он снабжен буфером для контекста растрового изображения. Затем, когда вы рисуете в слое, ваш буфер поддержки контекста битмапа должен содержать новые данные.

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.add category to 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; 
} 
Смежные вопросы