2016-03-23 12 views
0

ボタンといくつかのアイコンでNSVisualEffectViewが結ばれています。このビューのmaterialは、もともとNSVisualEffectMaterialDarkと同じです。つまり、「Vibrant Dark」です。NSVisualEffectViewの変更に1回以上のクリックで変更する

私が書いた次のコードは、次の操作を行うためにをを想定している。

1)ビューの材料はNSVisualEffectMaterialDarkNSVisualEffectMaterialLight
2であるかどうかを検出)がYES/NOそれぞれ
3にBOOL isDarkを変更)現在のビューに基づいて、ビューのappearance、つまりmaterialをダークからライト/ライトからダークに変更します。

問題は、私がアプリケーションを実行してボタンをクリックすると、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; 
    } 
} 

答えて

0

それはもちろん予想通り、私が書いたコードは、少し問題があることが判明:

は、ここに私のコードです。 NSVisualEffectViewには、上記の物質のいずれも確認されていないので、NSVisualEffectMaterialDarkでもNSVisualEffectMaterialLightでも、両方の条件が偽です。マテリアルが最終的に一致し、それらを適切に比較できるように、マテリアルを異なるタイプの暗色に設定することを選択しているようです。

材料(NSVisualEffectMaterialDarkでもNSVisualEffectMaterialLight)でも、- (void)applicationDidFinishLaunching:(NSNotification *)aNotificationでは実際にはボタンを2回クリックしなければならない問題を修正できました。

EDIT:

それは私が知らなかった、彼らは希望のものであることを起こった他の材料があるが判明しました。
これらはNSVisualEffectMaterialMediumLightNSVisualEffectMaterialUltraDarkです。

関連する問題