osx yosemite - mavericks - Cómo detectar el modo oscuro en Yosemite para cambiar el icono del menú de la barra de estado
os x yosemite dmg (3)
Como lo señaló bergdesign , debe observar la notificación de todo el sistema y leer el dominio global persistente.
Hicimos una clase para simplificar el manejo de los cambios en la configuración del Modo Oscuro: https://github.com/weAreYeah/WAYTheDarkSide
Se vuelve tan fácil como ...
[WAYTheDarkSide welcomeApplicationWithBlock:^{
// Enabling Dark Mode
[someWindow setAppearance:[NSAppearance appearanceNamed:NSAppearanceNameVibrantDark]];
[someVisualEffectView setMaterial:NSVisualEffectMaterialDark];
} immediately:YES];
y
[WAYTheDarkSide outcastApplicationWithBlock:^{
// Disabling Dark Mode
[someWindow setAppearance:[NSAppearance appearanceNamed:NSAppearanceNameVibrantLight]];
[someVisualEffectView setMaterial:NSVisualEffectMaterialLight];
} immediately:YES];
Espero que esto ayude :)
El icono de la aplicación de la barra de estado debe cambiarse cuando el modo oscuro está habilitado en Yosemite. ¿Cómo detectar si el modo oscuro ha sido habilitado? ¿Hay alguna notificación para el mismo?
¿Es mejor mostrar otra imagen o cambiar el valor alfa de la imagen existente? ¿Necesitas entradas sobre cuál es la mejor manera de ir?
Debería utilizar imágenes de plantillas siempre que sea posible, ya que permiten que su UI se adapte automáticamente a los cambios realizados por el sistema (al menos cuando no hay un error en el sistema ... http://indiestack.com/2014/10/yosemites-dark-mode/ ). Pero en el caso de que puedas usar una vista personalizada en la barra de estado y no puedas aprovechar una imagen de plantilla, puedes verificar manualmente el modo oscuro y adaptar tu IU en consecuencia.
Puede verificar si el modo oscuro está habilitado o no al recuperar una clave de las preferencias globales del usuario, como esto:
NSDictionary *dict = [[NSUserDefaults standardUserDefaults] persistentDomainForName:NSGlobalDomain];
id style = [dict objectForKey:@"AppleInterfaceStyle"];
BOOL darkModeOn = ( style && [style isKindOfClass:[NSString class]] && NSOrderedSame == [style caseInsensitiveCompare:@"dark"] );
Al menos para la primera versión de Yosemite, la clave no está presente cuando el modo oscuro está deshabilitado, pero la clave está presente y devuelve el valor de cadena @ "Oscuro" cuando el modo oscuro está habilitado. Agregué la comparación entre mayúsculas y minúsculas porque he visto que las claves de preferencia cambian su caso entre las versiones del sistema, y esto agrega un poco de seguro contra eso.
Para monitorear el estado actual de la configuración, se registra como observador de una notificación distribuida (dentro de un método apropiado), como esto:
[[NSDistributedNotificationCenter defaultCenter] addObserver:self selector:@selector(darkModeChanged:) name:@"AppleInterfaceThemeChangedNotification" object:nil];
Y creas un método para actuar como el selector de mensajes para la notificación, como esto:
-(void)darkModeChanged:(NSNotification *)notif
{
NSLog(@"Dark mode changed");
}
El icono de la barra de estado debe ser una imagen de plantilla. Simplemente configure el setTemplate: Sí a NSImage. Y cuando se cambia al modo oscuro, se debe aplicar la vibración.