Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/objective-c/27.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Objective c NSVisualEffectView更改需要多次单击才能更改_Objective C_Xcode_Macos_Cocoa_Nsvisualeffectview - Fatal编程技术网

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/NO
3) 根据当前视图将视图的
外观
,即
材质
,从暗更改为亮/从亮更改为暗

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