Objective c NSVisualEffectView更改需要多次单击才能更改
因此,我有一个Objective c NSVisualEffectView更改需要多次单击才能更改,objective-c,xcode,macos,cocoa,nsvisualeffectview,Objective C,Xcode,Macos,Cocoa,Nsvisualeffectview,因此,我有一个NSVisualEffectView与一个按钮和一些图标连接。此视图的材质最初等于NSVisualEffectMaterialDark,换句话说,就是Vibrant Dark 我编写的以下代码被认为是执行以下操作的: 1) 检测视图的材质是nsVisualEffectMaterialMark还是NSVisualEffectMaterialLight 2) 将BOOLisDark分别更改为YES/NO 3) 根据当前视图将视图的外观,即材质,从暗更改为亮/从亮更改为暗 问题是,当我运
NSVisualEffectView
与一个按钮和一些图标连接。此视图的材质
最初等于NSVisualEffectMaterialDark
,换句话说,就是Vibrant Dark
我编写的以下代码被认为是执行以下操作的:
1) 检测视图的材质是nsVisualEffectMaterialMark
还是NSVisualEffectMaterialLight
2) 将BOOL
isDark
分别更改为YES/NO3) 根据当前视图将视图的
外观
,即材质
,从暗更改为亮/从亮更改为暗
问题是,当我运行应用程序并单击按钮时,NSVisualEffectView
的颜色会从饱和的黑色变为较浅的颜色,而不是应该的颜色
如何解决此问题并防止其发生
注意:NSVisualEffectView的名称为侧栏
,按钮名称为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
没有它检查的上述任何材质,NSVisualEffectMaterialDark
也没有NSVisualEffectMaterialLight
,因此这两个条件都为假。它似乎选择将材质设置为不同类型的黑暗,以便材质最终匹配并能够正确比较它们
通过在-(void)applicationdFinishLaunching:(NSNotification*)aNotification
中说明材料(NSVisualEffectMaterialDark
或NSVisualEffectMaterialLight
),我解决了一个问题,我必须单击两次按钮才能使按钮实际工作
编辑:
原来还有其他我不知道的材料,它们恰好是我想要的。这些是
NSVisualEffectMaterialMediumLight
和nsVisualEffectMaterialAltradark