2016-03-01 40 views
1

我有一个NSWindow NSImage和它上面的NSTextView与长文本http://www.gutenberg.org/cache/epub/100/pg100.txt,如果我用纯色背景绘制,文本编辑速度很快。透明的NSTextView性能

但是如果我画没有背景,[self setDrawsBackground:NO]它很慢。

有没有更新?我也试过

[self setDrawsBackground:YES]; 
    [self setBackgroundColor:[NSColor clearColor]]; 

也许用setBackgroundFilters的NSTextView?

谢谢!

+0

我认为问题与图像大小有关,而不是文本视图:它会在图像视图上重绘/更新请求,这可能会很昂贵。你可以跟踪图像的重绘和/或使用非常小的分辨率图像进行测试吗? –

+0

图像不是问题,如果我删除图像,问题仍然存在。问题是透明NSTextView的性能... – F79

+0

好吧,我明白了。最后一件事发生在我的脑海里(否则我不知道):文本视图的大小在某种程度上是动态的吗?然后,一个测试显然是将其固定在测试的大小,以排除罪魁祸首的名单。 –

回答

0

我找到了部分解决方案。如果禁用平滑的字体,则性能会提高很多。 首先,您必须拥有NSTextView的子类。 然后,

- (void)drawRect:(NSRect)dirtyRect 
{ 
    [[NSGraphicsContext currentContext] setShouldAntialias:YES]; 
    CGContextSetShouldAntialias((CGContextRef)[[NSGraphicsContext currentContext] graphicsPort], YES); 
    CGContextSetShouldSmoothFonts((CGContextRef)[[NSGraphicsContext currentContext] graphicsPort], NO); 

    [super drawRect:dirtyRect]; 

    // Drawing code here. 
} 

而且,你可以使用:

self.textview.layoutManager.allowsNonContiguousLayout = YES; 

小幅提高性能。

这与具有不透明背景不一样,但它有帮助。