所以我有一个NSVisualEffectView连接一个按钮和一些图标。这个视图的material最初等于NSVisualEffectMaterialDark,换句话说,充满活力的黑暗。
我编写的以下代码是假定的来执行以下操作:
1)检测视图的材料是NSVisualEffectMaterialDark还是NSVisualEffectMaterialLight
2)将BOOL 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;
}
}发布于 2016-03-24 22:21:58
当然,正如我所期望的那样,我编写的代码有点问题。NSVisualEffectView没有它检查的上述材料,NSVisualEffectMaterialDark或NSVisualEffectMaterialLight,因此这两个条件都是假的。它似乎选择将材料设置为不同类型的黑暗,这样材料最终将匹配,并能够适当地进行比较。
通过声明任何一种材料(NSVisualEffectMaterialDark或NSVisualEffectMaterialLight),在- (void)applicationDidFinishLaunching:(NSNotification *)aNotification中,我能够修复我必须单击两次按钮才能实际工作的问题。
编辑:
原来还有其他一些我不知道的材料,它们恰好是我想要的。
这些是NSVisualEffectMaterialMediumLight和NSVisualEffectMaterialUltraDark。
https://stackoverflow.com/questions/36187933
复制相似问题