Cocoa在NSImage上绘制文本

时间:2012-12-14 06:27:05

标签: objective-c macos cocoa drawing nsimage

我有一个包含图像的NSSegmentedControl(todayButton)。我正在尝试使用以下内容在图像上绘制一些文本:

NSImage *img = [todayButton imageForSegment:0]

[img lockFocus]
[@"15" drawAtPoint:NSZeroPoint withAttributes:nil]
[img unlockFocus]

[img setTemplate:YES]

图像被设置为模板,不会抛出任何错误,但图像上没有文字。

2 个答案:

答案 0 :(得分:0)

我可能完全错了,但我的直觉告诉我你可能正在遇到NSImage缓存问题。系统会缓存图像,除非您更改图像的设置(通常不是您要重复使用的图像的最佳方法),或者只是创建一个新图像而不是从图像中加载图像。

您可能需要从头开始制作新图像,将任何背景(您从按钮片段获得的内容)合成到其中,然后绘制文本。否则系统会缓存其他地方的内容,这有时会导致未定义(或至少是意外)的行为。

答案 1 :(得分:0)

修改图片后尝试调用setImage:forSegment:。您交回的图像很可能是副本。


作为与问题无关的旁注,setTemplate:需要BOOL,而不是C ++ bool。您应该通过YES,而不是true。这表明您可能正在将视图控制器代码编译为ObjC ++。 If so, I really recommend against that.