Для изменения 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,

Другие вопросы по тегам