Как узнать имя NSColor controlAccentColor

Я хотел бы использовать [NSColor controlAccentColor] в нескольких местах, однако я также хотел бы вернуться к особому оттенку синего, когда пользователь выбирает синий системный акцентный цвет.

Как я могу надежно определить тип/имя выбранного controlAccentColor?


person strangetimes    schedule 01.10.2018    source источник
comment
Я не думаю, что есть какой-либо способ, потому что я сомневаюсь, что разные акцентные цвета имеют идентифицируемые имена (по крайней мере, публично). Вы можете преобразовать акцентный цвет в HSB и определить, является ли он синим, а затем заменить его другим синим цветом.   -  person James Bucanek    schedule 01.10.2018
comment
Это то, что я делал, пока не понял, что значение «синего» может не быть постоянным в зависимости от контекста. Думаю, тогда я буду искать более синеватый цвет.   -  person strangetimes    schedule 01.10.2018


Ответы (2)


Вы можете получить значение цвета с помощью:

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

Это возвращает nil, если для вашей системы Accent Color установлен синий цвет, или значение Int, если для него установлены другие цвета (значения перечислены здесь: Как определить цвет акцента в macOS 10.14?)

person Dan Messing    schedule 06.11.2019

Закончилось этим:

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];
}
person strangetimes    schedule 01.10.2018