Для изменения NSVisualEffectView требуется более одного клика.

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

Следующий код, который я написал, предполагается для выполнения следующих действий:

1) Определите, является ли материал представления NSVisualEffectMaterialDark или NSVisualEffectMaterialLight
2) Измените BOOL isDark на YES/NO соответственно
3) Измените appearance представления, другими словами, material, с Dark на Light / Light на Темный в зависимости от текущего вида.

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

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

Примечание. имя NSVisualEffectViewsideBar, имя кнопки — 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;
    }
}

person Lae    schedule 23.03.2016    source источник


Ответы (1)


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

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

ИЗМЕНИТЬ:

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

person Lae    schedule 24.03.2016