2016-03-23 6 views
0

У меня есть NSVisualEffectView, подключенный кнопкой и значками. material этого вида первоначально равен NSVisualEffectMaterialDark Другими словами, Vibrant Dark.Редактирование NSVisualEffectView требует нескольких кликов для изменения.

Следующий код, который я написал это должен сделать следующее:

1) Обнаружить, если материал вида не NSVisualEffectMaterialDark или NSVisualEffectMaterialLight
2) Измените в BOOL isDark к ДА/НЕТ соответственно
3) Измените вид appearance, т. Е. material, от Dark to Light/Light to Dark на основе текущего вида.

Проблема заключается в том, что когда я запускаю приложение и нажимаю кнопку, цвет NSVisualEffectView меняется от насыщенного темного до менее одного, а не от света, как предполагается.

Что я могу сделать, чтобы исправить эту проблему и предотвратить ее?

Примечание: имя по NSVisualEffectView «s является sideBar, имя кнопки является lightButton и isDark изначально установлен на YES.

Вот мой код:

-(IBAction)toggleLighting:(id)sender{ 
    if (self.sideBar.material == NSVisualEffectMaterialDark){ 
     _lightButton.title = (@"Dark Mode"); 
     [_lightButton setImage:[NSImage imageNamed:@"Dark Mode Icon"]]; 
     [_lightButton setAlternateImage:[NSImage imageNamed:@"Dark Mode Icon (Alt)"]]; 
     isDark = YES; 
     NSLog(@"Changed to Light Theme"); 
    } else if (self.sideBar.material == NSVisualEffectMaterialLight){ 
     _lightButton.title = (@"Light Mode"); 
     [_lightButton setImage:[NSImage imageNamed:@"Light Mode Icon"]]; 
     [_lightButton setAlternateImage:[NSImage imageNamed:@"Light Mode Icon (Alt)"]]; 
     isDark = NO; 
     NSLog(@"Changed to Dark Theme"); 
    } 

    if (isDark==YES){ 
     _sideBar.material = NSVisualEffectMaterialLight; 
     isDark = NO; 
    } else if (isDark==NO) { 
     _sideBar.material = NSVisualEffectMaterialDark; 
     isDark = YES; 
    } 
} 

ответ

0

Оказывается, что код, который я написал немного проблематично, как и следовало ожидать, конечно. NSVisualEffectView не имеет вышеуказанного материала, который он проверяет, NSVisualEffectMaterialDark или NSVisualEffectMaterialLight, поэтому оба условия являются ложными. Похоже, что он выбирает материал для другого типа темного цвета, чтобы материалы, в конце концов, соответствовали друг другу и могли правильно их сравнивать.

По заявлению любого материала (NSVisualEffectMaterialDark или NSVisualEffectMaterialLight), в - (void)applicationDidFinishLaunching:(NSNotification *)aNotification Я смог исправить проблему, когда мне пришлось дважды щелкнуть кнопку, чтобы на самом деле работать.

EDIT:

Оказывается, есть и другие материалы, я не знал, и они оказались искомыми.
Это NSVisualEffectMaterialMediumLight и NSVisualEffectMaterialUltraDark.

Смежные вопросы