Подтвердить что ты не робот

Как определить темный режим в Yosemite, чтобы изменить значок меню состояния

Значок приложения строки состояния должен быть изменен, если темный режим включен в Yosemite. Как определить, включен ли темный режим? Есть ли уведомление для того же?

Лучше ли отобразить другое изображение или изменить альфа-значение существующего изображения? Нужна помощь, на которую лучше всего идти?

4b9b3361

Ответ 1

Значок строки состояния должен быть образ шаблона. Просто установите setTemplate: Да для NSImage. И при переключении в темный режим должна применяться вибрация.

Ответ 2

Вам следует использовать шаблонные образы везде, где это возможно, потому что они позволяют вашему пользовательскому интерфейсу автоматически адаптироваться к изменениям, внесенным системой (по крайней мере, когда в системе нет ошибки... http://indiestack.com/2014/10/yosemites-dark-mode/). Но в случае, когда вы можете использовать пользовательский вид в строке состояния и не можете использовать изображение шаблона, вы можете вручную проверить темный режим и соответствующим образом адаптировать свой интерфейс.

Вы можете проверить, включен ли темный режим, извлекая ключ из глобальных настроек пользователя, например:

NSDictionary *dict = [[NSUserDefaults standardUserDefaults] persistentDomainForName:NSGlobalDomain];
id style = [dict objectForKey:@"AppleInterfaceStyle"];
BOOL darkModeOn = ( style && [style isKindOfClass:[NSString class]] && NSOrderedSame == [style caseInsensitiveCompare:@"dark"] );

По крайней мере, для первого выпуска Yosemite, ключ отсутствует, когда темный режим отключен, но клавиша присутствует и возвращает строковое значение @ "Темный", когда включен темный режим. Я добавил нечувствительность к регистру, потому что я видел, что ключи предпочтений изменяют их случай между выпуском системы, и это добавляет немного страховки против этого.

Чтобы отслеживать текущее состояние настройки, вы регистрируетесь в качестве наблюдателя распределенного уведомления (в рамках соответствующего метода), например:

[[NSDistributedNotificationCenter defaultCenter] addObserver:self selector:@selector(darkModeChanged:) name:@"AppleInterfaceThemeChangedNotification" object:nil];

И вы создаете метод для работы в качестве селектора сообщений для уведомления, например:

-(void)darkModeChanged:(NSNotification *)notif
{
    NSLog(@"Dark mode changed");
}

Ответ 3

Как отмечено bergdesign, вам необходимо наблюдать за системным уведомлением и читать постоянный глобальный домен.

Мы создали класс для упрощения обработки изменений в настройках темного режима: https://github.com/weAreYeah/WAYTheDarkSide

Это становится так же просто, как...

[WAYTheDarkSide welcomeApplicationWithBlock:^{
    // Enabling Dark Mode
    [someWindow setAppearance:[NSAppearance appearanceNamed:NSAppearanceNameVibrantDark]];
    [someVisualEffectView setMaterial:NSVisualEffectMaterialDark];

} immediately:YES];

и

[WAYTheDarkSide outcastApplicationWithBlock:^{
    // Disabling Dark Mode
    [someWindow setAppearance:[NSAppearance appearanceNamed:NSAppearanceNameVibrantLight]];
    [someVisualEffectView setMaterial:NSVisualEffectMaterialLight];

} immediately:YES];

Надеюсь, что это поможет:)