Для изменения NSVisualEffectView требуется более одного клика
Итак, у меня есть NSVisualEffectView
подключил с кнопкой и некоторые значки. material
этого взгляда изначально равен NSVisualEffectMaterialDark
другими словами, Яркий Темный.
Следующий код, который я написал, должен делать следующее:
1) Определите, является ли материал представления NSVisualEffectMaterialDark
или же NSVisualEffectMaterialLight
2) Поменять БУЛ isDark
ДА / НЕТ соответственно
3) Изменить вид appearance
другими словами, material
от темного к светлому / от светлого к темному в зависимости от текущего вида.
Проблема в том, что когда я запускаю приложение и нажимаю кнопку, NSVisualEffectView
Цвет меняется от насыщенного темного к менее яркому, а не светлому, как это должно быть.
Что я могу сделать, чтобы исправить эту проблему и предотвратить ее возникновение?
Примечание: NSVisualEffectView
зовут 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;
}
}
1 ответ
Оказывается, код, который я написал, немного проблематичен, как и следовало ожидать. NSVisualEffectView
не имеет ни одного из вышеуказанных материалов, которые он проверяет, NSVisualEffectMaterialDark
ни NSVisualEffectMaterialLight
поэтому оба условия ложны. Кажется, что он выбирает для материала другой тип темноты, чтобы материалы в конечном итоге совпали и могли сравнивать их должным образом.
Изложив любой материал (NSVisualEffectMaterialDark
ни NSVisualEffectMaterialLight
), в - (void)applicationDidFinishLaunching:(NSNotification *)aNotification
Мне удалось решить проблему, когда мне пришлось дважды щелкнуть, чтобы кнопка действительно заработала.
РЕДАКТИРОВАТЬ:
Оказывается, есть другие материалы, о которых я не знал, и они оказались желаемыми.
Это NSVisualEffectMaterialMediumLight
а также NSVisualEffectMaterialUltraDark
,