Как сохранить и прочитать CGLayerRef в NSmutableArray

у меня есть вопрос об "элементах" 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];

};

person Pixman    schedule 01.12.2009    source источник


Ответы (1)


Вы пропустили директиву @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];

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

person TechZen    schedule 01.12.2009
comment
Этот ответ хорош, но для лучшей работы с моим значением CGCLayerRef я написал эту строку: [layerTable addObject:[[NSValue alloc] initWithBytes:&imageLayer objCType:@encode(CGLayerRef)]]; - person Pixman; 02.12.2009