【问题标题】:How to tell the name of NSColor controlAccentColor如何分辨 NSColor controlAccentColor 的名称
【发布时间】:2019-11-06 09:47:56
【问题描述】:

我想在一些地方使用[NSColor controlAccentColor],但是当用户选择蓝色系统强调色时,我也想回退到一种特殊的蓝色。

我怎样才能可靠地检测到所选择的controlAccentColor 的类型/名称?

【问题讨论】:

  • 我不认为有任何办法,因为我怀疑不同的强调色有可识别的名称(至少不是公开的)。您可以将强调色转换为 HSB 并确定它是否为“蓝色”,然后替换为不同的蓝色。
  • 这就是我一直在做的事情,直到我意识到“蓝色”值可能不是恒定的,具体取决于上下文。我想我会寻找更蓝的颜色。

标签: cocoa macos-mojave nscolor


【解决方案1】:

您可以通过以下方式获取颜色的值:

let accent = UserDefaults.standard.value(forKey: "AppleAccentColor")

当您的系统 Accent Color 设置为蓝色时返回 nil,或者当设置为其他颜色时返回 Int 值(此处列出的值:How can I determine the macOS 10.14 accent color?

【讨论】:

    【解决方案2】:

    这样结束了:

    if (@available(macOS 10.14, *)) {
      NSColor *accentColor = [[NSColor controlAccentColor] colorUsingColorSpace:[NSColorSpace deviceRGBColorSpace]];
      CGFloat redColor, greenColor, blueColor, alphaColor;
      [accentColor getRed:&redColor green:&greenColor blue:&blueColor alpha:&alphaColor];
      if (blueColor == 1 && redColor <= 0.1 && greenColor <= 0.5) {
        // Our special blue
        return [NSColor colorWithRed:52.0 / 255.0 green:109.0 / 255.0 blue:251.0 / 255.0 alpha:0.9]; // pastel blue
      }
      return [NSColor controlAccentColor];
    }
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2017-04-16
      相关资源
      最近更新 更多