如何将我的视图作为图片osx

时间:2014-06-01 07:00:35

标签: objective-c macos

我想将我的NSView(带图层)作为图像,我可以在OSX中这样做吗?

iOS中的

我将执行以下操作

-(UIImage*) makeImage//snapshot the view
{
    UIGraphicsBeginImageContext(self.view.bounds.size);
    [self.view.layer renderInContext:UIGraphicsGetCurrentContext()];
    UIImage *viewImage = UIGraphicsGetImageFromCurrentImageContext();
    UIGraphicsEndImageContext();
    return viewImage;
}

我从一个SO答案中尝试了这个解决方案

[[NSImage alloc] initWithData:[view dataWithPDFInsideRect:[view bounds]]];

但它没有用,因为我的NSView中有图层。

我从将UI转换为NS开始 现在我在每一行都有警告:)

-(NSImage*) makeImage :(RMBlurredView*)view
{
    UIGraphicsBeginImageContext(view.bounds.size);

    [self.view.layer renderInContext:UIGraphicsGetCurrentContext()];

    NSImage *viewImage = UIGraphicsGetImageFromCurrentImageContext();

    UIGraphicsEndImageContext();

    return viewImage;
}

我不熟悉OSX可以帮助我将此代码转换为OSX吗?

1 个答案:

答案 0 :(得分:5)

绘制到图像与iOS不同:

  1. 你创建一个空白图像,LOCK到它,所以所有绘图都转到那个图形上下文

    NSImage *image = [[NSImage alloc] initWithSize:self.view.bounds.size];
    [image lockFocus];
    
  2. 您绘制的图层与iOS上的相同

    CGContextRef ctx = [NSGraphicsContext currentContext].graphicsPort;
    [self.view.layer renderInContext:ctx];
    
  3. 解锁图片

    [image unlockFocus];
    
  4. 请注意,这仅适用于您的视图是否已分层。它不适用于非分层视图!
    您的视图 - 如上所示 - 是图层支持,所以一切都很好;)