2013-11-09 4 views
2

(я уже читал эту страницу, но это не помогло мне CALayer not displaying)CALayer не отображается

У меня есть класс с именем Image, который имеет это поле данных:

uint8_t *data; 

Я уже использую это data для отображения этого Image на CALayer, что я получил код сбора из Интернета.

Я видел, как создать в моем приложении еще одно окно, и я положил в него NSView, чтобы отобразить Image, используя этот метод, я намерен отобразить гистограмму последней, но теперь я просто пытаюсь отобразить снова тот же изображение:

-(void)wrapImageToCALayer: (CALayer*) layer{ 
    if(!layer) return; 

    CGColorSpaceRef grayColorSpace = CGColorSpaceCreateDeviceGray(); 

    CGContextRef context = CGBitmapContextCreate(data, width, height, 8, step, grayColorSpace, kCGImageAlphaNone); 

    CGImageRef dstImage = CGBitmapContextCreateImage(context); 


    dispatch_sync(dispatch_get_main_queue(), ^{ 
     layer.contents = (__bridge id)dstImage; 
    }); 

    CGImageRelease(dstImage); 
    CGContextRelease(context); 
    CGColorSpaceRelease(grayColorSpace); 
} 

И это мое окно Controler:

@implementation HistogramControllerWindowController 

@synthesize display; 

- (id)initWithWindow:(NSWindow *)window{ 
    self = [super initWithWindow:window]; 
    if (self) { 
     // Initialization code here. 

    } 
    return self; 
} 

- (void)windowDidLoad 
{ 
    // Implement this method to handle any initialization after your window controller's window has been loaded from its nib file. 

    [super windowDidLoad]; 


    histogramDisplayLayer = [CALayer layer]; 
    [histogramDisplayLayer setContentsGravity:AVLayerVideoGravityResizeAspectFill]; 
    histogramDisplayLayer.position = CGPointMake(display.frame.size.width/2., display.frame.size.height/2.); 
    [histogramDisplayLayer setNeedsDisplay]; 
    [display.layer addSublayer: histogramDisplayLayer]; 



} 

@end 

И я звоню так:

[frame wrapImageToCALayer:histogramDisplayLayer]; 

Обратите внимание, что histogramDisplayLayer внешнего (CALayer *)

+0

Отображение кода, не потрудившись объяснить переменные, это одно. Добавление слоя к слою - это еще одна вещь. –

+0

Извините, я не понял. Вы говорите, что я не должен этого делать? [display.layer addSublayer: histogramDisplayLayer]; –

ответ

2

Вашего histogramDisplayLayer имеет не определен размера, вы просто установить положение, но не его размер. Итак, запустите его фрейм, и это должно решить вашу проблему.

Смежные вопросы