swift - 渲染不同尺寸的相同图像

标签 swift cocoa nsimage

我的 Assets 中有一堆图片。我想做的是在 OSX 的状态栏中渲染图像,如下所示:

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

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

并且还在我打开的 View 之一中使用它:

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

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

我试过用

icon?.cacheMode = NSImageCacheMode.Never

但是没有效果。

这是应该的吗?我不能使用相同的图像并在不同的地方以不同的方式渲染它吗?它们都是不同的 NSImage 实例。

最佳答案

They are both different NSImage instance.

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

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

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

关于swift - 渲染不同尺寸的相同图像,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34781206/

相关文章:

iOS:检测设备是否为iPhone X系列(无边框)

ios - SpriteKit 粒子发射器改变颜色

ios - 即使设置为亮起状态栏也保持黑色

iphone - 调试-[NSCFDictionary setObject :forKey:]: attempt to insert nil value

objective-c - 如何使用 Core Graphics 和 CALayer 绘制更精确的线条

macos - CVPixelBufferRef 到 NSImage

macos - 如何在 NSPopupButton 项目中显示图像和文本

ios - 如何将阴影添加到导航栏而不是默认边框

objective-c - 如何创建 Apple 邮件插件

cocoa - 在核心数据模型中存储 NSImage