Ответ 1
Значок строки состояния должен быть образ шаблона. Просто установите setTemplate: Да для NSImage. И при переключении в темный режим должна применяться вибрация.
Значок приложения строки состояния должен быть изменен, если темный режим включен в Yosemite. Как определить, включен ли темный режим? Есть ли уведомление для того же?
Лучше ли отобразить другое изображение или изменить альфа-значение существующего изображения? Нужна помощь, на которую лучше всего идти?
Значок строки состояния должен быть образ шаблона. Просто установите setTemplate: Да для NSImage. И при переключении в темный режим должна применяться вибрация.
Вам следует использовать шаблонные образы везде, где это возможно, потому что они позволяют вашему пользовательскому интерфейсу автоматически адаптироваться к изменениям, внесенным системой (по крайней мере, когда в системе нет ошибки... 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");
}
Как отмечено 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];
Надеюсь, что это поможет:)