NSVisualEffectView 改变需要不止一次点击改变

NSVisualEffectView change takes more than one click to change

所以我有一个 NSVisualEffectView 连接了一个按钮和一些图标。此视图的 material 原本等于 NSVisualEffectMaterialDark 也就是 Vibrant Dark。

我编写的以下代码应该执行以下操作:

1) 检测视图的material是NSVisualEffectMaterialDark还是NSVisualEffectMaterialLight
2) 将BOOLisDark分别改为YES/NO
3) 根据当前视图更改视图 appearance,换句话说 material,从暗到亮/从亮到暗。

问题是,当我 运行 应用程序并单击按钮时,NSVisualEffectView 的颜色从饱和的深色变为浅色,而不是应有的浅色。

我该怎么做才能解决这个问题并防止它发生?

注:NSVisualEffectView的名字是sideBar,按钮的名字是lightButtonisDark原来是设置为 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;
    }
}

原来我写的代码有点问题,果然不出所料。 NSVisualEffectView 有上面 material 的 none 它检查,NSVisualEffectMaterialDark 也没有 NSVisualEffectMaterialLight,因此两个条件都是假的。似乎它选择将 material 设置为不同类型的暗,以便 material 最终匹配并能够正确比较它们。

通过在 - (void)applicationDidFinishLaunching:(NSNotification *)aNotification 中说明 material(NSVisualEffectMaterialDarkNSVisualEffectMaterialLight),我能够解决我必须单击两次按钮才能打开的问题实际工作。

编辑:

事实证明还有其他 materials 我不知道,它们恰好是我想要的。
这些是 NSVisualEffectMaterialMediumLightNSVisualEffectMaterialUltraDark .