如何修复 cocoa 应用程序中 NSButton 上的模糊图像?

How to fix blurry images on NSButton in cocoa application?

我有几个 NSButtons,它们的作用类似于播放器控件(播放、暂停等) 当我为它们分配图像时,该图像看起来很模糊。

  let playPauseButton: NSButton = {
    let btn = NSButton(frame: .zero)
    let image = NSImage(named: "pauseIcon")
    btn.imageScaling = NSImageScaling.scaleNone
    btn.image = image
    btn.setAccessibilityLabel("Pause")
    btn.isBordered = false
    return btn
}()

可以在以下位置查看图像: https://www.dropbox.com/s/38tvh49ikc2m4x7/Play.pdf?dl=0

这张图片是 .pdf 格式,但我尝试了 .png 的 1x、2x 和 3x,但它看起来仍然很模糊。

我也查了这个问题: Images in NSButton and NSImageView Blurred

但这对我也没有帮助。

这里有一些可以尝试修复模糊边缘的问题。

  1. 假设您 运行 在 Mojave and/or 中使用图层支持视图,请确保 NSButton 绘制自己的背景颜色( setDrawsBackground YES )。否则 CoreAnimation CALayer 可能发生的情况是 NSImage 背景 alpha 的混合操作是 substandard/wrong.
  2. 这不应该应用于 NSImage,但也许值得一试:
  3. [nsImage setScalesWhenResized:NO];
  4. 尝试不同的 NSCompositingOperation NSCompositeCopy 与 NSCompositeSourceOver

解决方法非常简单。

  1. 打开资产目录。

  2. Select 您所有模糊的资产。

  3. 按以下命令打开属性检查器:command + option + 4.

  4. 勾选"Preserve vector data"。

  5. 在该复选框下,查找 "Scale" 并将其设置为 "Single scale"

请注意,这仅在您的设计器将图标导出为 PDF 文件时有效。另外,如果只是将.png 或.jpg 转为.pdf 是行不通的,实际的矢量图必须导出为.pdf。