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
,按钮的名字是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;
}
}
原来我写的代码有点问题,果然不出所料。
NSVisualEffectView
有上面 material 的 none 它检查,NSVisualEffectMaterialDark
也没有 NSVisualEffectMaterialLight
,因此两个条件都是假的。似乎它选择将 material 设置为不同类型的暗,以便 material 最终匹配并能够正确比较它们。
通过在 - (void)applicationDidFinishLaunching:(NSNotification *)aNotification
中说明 material(NSVisualEffectMaterialDark
或 NSVisualEffectMaterialLight
),我能够解决我必须单击两次按钮才能打开的问题实际工作。
编辑:
事实证明还有其他 materials 我不知道,它们恰好是我想要的。
这些是 NSVisualEffectMaterialMediumLight
和 NSVisualEffectMaterialUltraDark
.
所以我有一个 NSVisualEffectView
连接了一个按钮和一些图标。此视图的 material
原本等于 NSVisualEffectMaterialDark
也就是 Vibrant Dark。
我编写的以下代码应该执行以下操作:
1) 检测视图的material是NSVisualEffectMaterialDark
还是NSVisualEffectMaterialLight
2) 将BOOLisDark
分别改为YES/NO
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;
}
}
原来我写的代码有点问题,果然不出所料。
NSVisualEffectView
有上面 material 的 none 它检查,NSVisualEffectMaterialDark
也没有 NSVisualEffectMaterialLight
,因此两个条件都是假的。似乎它选择将 material 设置为不同类型的暗,以便 material 最终匹配并能够正确比较它们。
通过在 - (void)applicationDidFinishLaunching:(NSNotification *)aNotification
中说明 material(NSVisualEffectMaterialDark
或 NSVisualEffectMaterialLight
),我能够解决我必须单击两次按钮才能打开的问题实际工作。
编辑:
事实证明还有其他 materials 我不知道,它们恰好是我想要的。
这些是 NSVisualEffectMaterialMediumLight
和 NSVisualEffectMaterialUltraDark
.