2016-01-11 57 views
0

我試圖在NSImage上繪製一些文本,但我遇到了一些問題。
最初,我只是在NSImage上繪製了一個屬性字符串,但是如果字符串太長,它會跑掉圖像,我找不到將文本換行換行的方法。NSTextView不能將文本繪製到NSImage上

爲了解決這個問題,我想我可以製作一個NSTextView,將文本放在那裏,然後將其繪製到NSImage上。

不幸的是,當我試圖將NSTextView繪製到NSImage時,文本不會出現。但NSTextView的背景顏色確實顯示出來。

當我在將焦點鎖定在NSImage之前設置斷點並預覽NSTextView時,文本視圖具有文本。在將文本視圖繪製到NSImage上之後,它看起來像是NSTextView,只是沒有文本。

如果有更好的方法將文本投射到具有多行代碼的NSImage上,請讓我知道如何。

下面是我爲參考編寫的代碼:

NSTextView *textToDraw = [[NSTextView alloc] initWithFrame:NSMakeRect(0, 0, input.size.width - 16, 243)]; 
textToDraw.backgroundColor = [NSColor blueColor]; 
[textToDraw setAlignment:NSTextAlignmentCenter]; 
[textToDraw setEditable:YES]; 
// textOnImage is a regular NSString 
[textToDraw insertText:textOnImage replacementRange:NSMakeRange(0, textOnImage.length)]; 
[textToDraw setTextColor:[NSColor blackColor]]; 
[textToDraw setFont:font]; 
[textToDraw setEditable:NO]; 

// input is an NSImage 
[input lockFocus]; 
[textToDraw drawRect:NSMakeRect(8, inputImage.size.height - textToDraw.frame.size.height - 8, textToDraw.frame.size.width, textToDraw.frame.size.height)]; 
[input unlockFocus]; 
+0

重複的圖像; http://stackoverflow.com/questions/13873764/cocoa-draw-text-on-nsimage –

+0

@johnelemans這個問題,儘管相似,不是我的重複,也不回答我的問題。 – tww0003

+0

我不認爲你可以像這樣調用textview的drawRect方法。在繪製這些對象之前,通常通過超級視圖完成很多圖形上下文設置。爲什麼不將textview添加到imageview的超級視圖中,覆蓋圖像,然後讓應用程序觸發圖形? –

回答

0

除了繪製TextView的圖像可以提供有界矩形中的文本應繪製的。如果字符串太長,它不會從圖像中跑出來,並會自動輸入新行。

這裏是代碼,其中inputImage是要在其上繪製文本

NSImage *newImage = [[NSImage alloc] initWithSize:inputImage.size]; 
[newImage lockFocus]; 
[inputImage drawAtPoint:NSZeroPoint fromRect:NSZeroRect operation:NSCompositeSourceOver fraction:1.0]; 
[textStr drawInRect:boundedRect withAttributes:attrsDictionary]; 
[newImage unlockFocus];