为OSX菜单栏动态创建模板图像

时间:2016-06-26 14:02:39

标签: macos cocoa

我在为OSX菜单栏创建模板图像时遇到问题。据我所知,它必须是PDF图像。为此,我有:

var pageRect: CGRect = CGRectMake(0, 0, CGFloat(10), CGFloat(barHeight))
let pdfData: NSMutableData = CFDataCreateMutable(nil, 0)
let pdfConsumer = CGDataConsumerCreateWithCFData(pdfData as CFMutableDataRef)
let pdfContext = CGPDFContextCreate(pdfConsumer, &pageRect, nil)

然后我画了PDF:

CGPDFContextBeginPage(pdfContext, nil)
CGContextSetRGBFillColor (pdfContext, 1, 0, 0, 1)
CGContextFillRect (pdfContext, CGRectMake (0, 0, 200, 100 ))
CGPDFContextEndPage(pdfContext)

然后我尝试创建一个NSImage:

let image = NSImage(data: pdfData)

并将其添加到状态项的图像属性:

button.image = image

然而,这只是不起作用。我已经尝试将图像保存到磁盘并打开它,但得到图像已损坏的消息,所以我怀疑错误是将pdfData转换为NSImage,尽管我对此并不完全有信心。无论如何,任何帮助将不胜感激。

1 个答案:

答案 0 :(得分:2)

模板图片必须是PDF。要创建NSImage模板图像的实例,只需将其template属性设置为true即可。

无论图像的性质如何(位图,PDF等等),系统只会在模板图像时使用其alpha通道。颜色通道被忽略。

如果文件名 - 减号 - 扩展名以“模板”结尾,系统会自动将从文件加载的图像标记为模板图像。所以,例如,fooTemplate.png或barTemplate.pdf。