Как сохранить и прочитать CGLayerRef, в NSmutableArray - PullRequest
1 голос
/ 01 декабря 2009

У меня вопрос по поводу "элементов" CGLayerRef (потому что они не являются объектами!)

В моем приложении я хочу сохранить список CGLayerRef, созданный из растровых изображений, для получения хорошей частоты кадров на моем DrawRect.

как я могу хранить и читать CGLayerRef в этом коде?

Это код для хранения в NSMutableArray

    CGLayerRef imageLayer;
// create my layer...
// init  my NSMutableArray
if (layerTable == nil) {
    layerTable = [[NSMutableArray alloc] init];
}
// and store my CGCLayer in this array with NSValue
[layerTable addObject:[[NSValue alloc] initWithBytes:imageLayer objCType:"CGLayerRef"]];

Теперь код для DrawRect на мой взгляд:

«actualIdp» - это int для определения слоя, который нужно нарисовать.

-(void)drawInContext:(CGContextRef)context{
// other code...

// here I want to read my CGLayerRef


//test with NSValue, but i don't know NSValue

NSValue *val = [layerTable objectAtIndex:actualIdp];
CGLayerRef layerToShow;
[val getValue:layerToShow]; // maybe an error

CGContextDrawLayerInRect(context, imageRect, layerToShow );

}

Здесь код для изменения моего идентификатора:

-(void)showThisId:(int)idp{
actualIdp = idp;
[self setNeedsDisplay];

};

1 Ответ

2 голосов
/ 01 декабря 2009

Вы пропустили директиву @encode:

[layerTable addObject:[[NSValue alloc] initWithBytes:imageLayer objCType:"CGLayerRef"]];

следует читать:

[layerTable addObject:[[NSValue alloc] initWithBytes:imageLayer objCType:@encode(CGLayerRef)]];

Вам необходимо передать адрес буфера в [NSValue getValue:]. Итак, эта строка:

[val getValue:layerToShow];

Должно быть:

[val getValue:&layerToShow];

Я думаю, это должно сработать.

...