Cocoa如何在NSImage上绘制文本

5

我有一个NSSegmentedControl(todayButton),其中包含一张图片。 我正在尝试使用以下方法在图像上绘制一些文本:

NSImage *img = [todayButton imageForSegment:0]

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

[img setTemplate:YES]

图像被设置为模板,没有出现错误,但图像上没有出现任何文本。
2个回答

0

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

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


0
尝试在修改图像后调用setImage:forSegment:。很有可能你得到的图像是一份副本。
作为与问题无关的附注,setTemplate:需要一个BOOL,而不是C++的bool。你应该传递YES,而不是true。这表明您可能正在将视图控制器代码编译为ObjC++。如果是这样,我真的不建议这样做。

我尝试过这个,但是没有成功 - 谢谢你的尝试。另外,我实际上正在使用macruby来编写这个。原始代码是用Ruby编写的,我将其翻译成了Objective C,但忘记将true更改为YES。 - Firenze

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接