【问题标题】:CALayer doesn't displayCALayer 不显示
【发布时间】:2013-11-21 19:05:51
【问题描述】:

(我已经阅读了此页面,但对我没有帮助CALayer not displaying

我有一个名为 Image 的类,它有这个字段数据:

uint8_t *data;

我已经使用此dataCALayer 上显示此Image,这是我从互联网收集的代码。

我看到了如何在我的应用程序中创建另一个窗口,我在其中放置了一个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);
}

这是我的窗口控制器:

@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 *)

【问题讨论】:

  • 显示代码而不费心解释变量是一回事。将图层添加到图层是另一回事。
  • 对不起,我没听懂。你是说我不应该这样做?? [display.layer addSublayer: histogramDisplayLayer];

标签: objective-c xcode macos calayer nsview


【解决方案1】:

只需插入:

[display setWantsLayer:YES]; // view's backing store is using a Core Animation Layer

之前:

[display.layer addSublayer: histogramDisplayLayer];

[Best way to change the background color for an NSView]

【讨论】:

    【解决方案2】:

    您的 histogramDisplayLayer 没有定义大小,您只是设置了一个位置,但没有设置它的大小。所以初始化它的框架,这应该可以解决你的问题。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2023-03-22
      • 1970-01-01
      相关资源
      最近更新 更多