2016-03-01 39 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; 

小幅提高性能。

這與具有不透明背景不一樣,但它有幫助。