0

所以我有NSVisualEffectView一个按钮和一些图标。该material视图的原始等于NSVisualEffectMaterialDark换句话说,Vibrant Dark。

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

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

问题是,当我运行应用程序并单击按钮时,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;
    }
}
4

1 回答 1

0

事实证明,我写的代码有点问题,当然正如预期的那样。NSVisualEffectView没有它检查的上述材料,也NSVisualEffectMaterialDark没有NSVisualEffectMaterialLight,因此这两个条件都是错误的。似乎它选择将材质设置为不同类型的黑暗,以便材质最终匹配并能够正确比较它们。

通过说明任一材料(NSVisualEffectMaterialDark也不是NSVisualEffectMaterialLight),- (void)applicationDidFinishLaunching:(NSNotification *)aNotification我能够解决我必须单击两次才能使按钮实际工作的问题。

编辑:

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

于 2016-03-24T22:21:58.113 回答