Я пытаюсь сохранить текущий контекст NSView и снова нарисовать его позже в NSView. Мне было интересно, какой самый быстрый и эффективный способ сделать это?
Кэшировать контекст NSView
Ответы (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
.
Вот пример проекта, с которым вы можете поиграть ????
person
Guilherme Rambo
schedule
23.09.2015