渲染具有不同大小的相同图像

时间:2016-01-14 03:28:00

标签: swift cocoa nsimage

我的资产中有大量图片。我想要做的是在OSX的状态栏中渲染图像如下:

let icon = NSImage(named: "statusIcon")
icon?.size = NSSize.init(width: 18, height: 18)

icon?.template = true
statusItem.image = icon
statusItem.menu = statusMenu

并在我打开的一个视图中使用它:

self.dayIcon.image = NSImage(named: "statusIcon")

问题是,一旦我设置状态栏图像,视图中的图像也会发生变化,即颜色和大小(更改为18x18)

我尝试过使用

icon?.cacheMode = NSImageCacheMode.Never

但没有效果。

这是怎么回事?我可以不使用相同的图像并在不同的地方以不同的方式呈现它。它们都是不同的NSImage个实例。

2 个答案:

答案 0 :(得分:5)

  

它们都是不同的NSImage实例。

他们不是,而且确实是你的问题。

+ [NSImage imageNamed:]可能会返回图像的现有缓存实例。

如果要更改图像的大小而不影响可能持有引用的任何其他人,请复制它。 NSImage的副本是轻量级的 - 它不会复制保存渲染(位图,PNG情况下)数据的基础图像表示。

答案 1 :(得分:3)

我想你需要先调整图片大小。为此,您可以使用不同的方式。例如,您可以为NSImage类编写扩展。例如Resize NSImage in Swift