渲染不同尺寸的相同图像

Rendering the same image with different sizes

我的资产中有一堆图片。我想要做的是在 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 个实例。

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

They are both different NSImage instance.

它们不是,这确实是您的问题。

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

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