1

我正在尝试存储 NSView Current Context 并稍后再次将其绘制到 NSView 。我想知道最快和最有效的方法是什么?

4

1 回答 1

1

您可以将您的内容绘制到一个NSImage,然后再重新绘制图像,但是您需要在需要时使缓存无效(这取决于您的视图的作用)。

例子:

@interface SOCacheView : NSView

@end

@implementation SOCacheView
{
    NSImage *_cache;
}

- (void)drawRect:(NSRect)dirtyRect
{
    [super drawRect:dirtyRect];

    if (!_cache) [self prepareImage];

    [_cache drawAtPoint:NSZeroPoint fromRect:self.bounds operation:NSCompositeSourceOver fraction:1.0];
}

- (void)prepareImage
{
    _cache = [[NSImage alloc] initWithSize:self.bounds.size];
    [_cache lockFocus];

    // do the drawing here...

    [[NSColor blueColor] setFill];
    NSRectFill(NSMakeRect(0, 0, NSWidth(self.bounds)/2, NSHeight(self.bounds)));
    [[NSColor redColor] setFill];
    NSRectFill(NSMakeRect(NSWidth(self.bounds)/2, 0, NSWidth(self.bounds)/2, NSHeight(self.bounds)));

    [_cache unlockFocus];
}

要使缓存的图形无效,只需设置_cachenil

这是一个示例项目供您使用

于 2015-09-23T23:45:41.580 回答