从 NSView 制作 NSImage

Making an NSImage out of an NSView

我知道如何创建一个 NSImage 描述一个 NSView 及其所有子视图,但我想要的是一个 NSImage 视图 忽略 它的子视图。我可以想出使用 NSView 的子类来执行此操作的方法,但我希望尽可能避免子类化。有人有什么想法吗?

我建议在屏幕外制作所需 NSView 的副本并拍摄快照。

隐藏子视图,抓取图像,取消隐藏子视图:

NSMutableArray* hiddenViews = [[NSMutableArray] alloc init];

for (NSView* subview in [self subviews]) {
    if (subview hidden) [hiddenViews addObject: subview];
    else [subview setHidden:YES];
}

NSSize imgSize = self.bounds.size;
NSBitmapImageRep * bir = [self bitmapImageRepForCachingDisplayInRect:[self bounds]];
[bir setSize:imgSize];
[self cacheDisplayInRect:[self bounds] toBitmapImageRep:bir];
NSImage* image = [[NSImage alloc] initWithSize:imgSize];
[image addRepresentation:bir];

for (NSView* subview in [self subviews]) {
    if (![hiddenViews containsObject: subview])
        [subview setHidden:NO];
}