我正在尝试存储 NSView Current Context 并稍后再次将其绘制到 NSView 。我想知道最快和最有效的方法是什么?
问问题
196 次
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];
}
要使缓存的图形无效,只需设置_cache
为nil
。
这是一个示例项目供您使用
于 2015-09-23T23:45:41.580 回答