NSTextView没有在NSImage上绘制文本

时间:2016-01-11 21:49:50

标签: objective-c macos cocoa nstextview nsimage

我试图在NSImage上绘制一些文字,但我遇到了一些问题  最初我只是在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];

1 个答案:

答案 0 :(得分:0)

您可以提供应在其中绘制文本的有界矩形,而不是在图像上绘制文本视图。如果字符串太长,它将不会从图像中运行并自动进入新行。

以下是代码,其中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];