你如何在NSWindow上使用黑暗的活力?

ken*_*nyc 16 cocoa objective-c appkit nswindow osx-yosemite

使用Vibrant Dark(NSAppearanceNameVibrantDark)或Vibrant Light(NSAppearanceNameVibrantLight)模式的正确方法是NSWindow什么?

我正在构建一个应用程序,并希望提供新的Vibrant Dark外观作为主应用程序的选项NSWindow.窗口本身是一个非常直接的窗口,NSToolbar顶部和滚动视图作为主要内容区域.

苹果公司提供了大量关于使用新的活力外观和a的信息NSVisualEffectsView,但我正在寻找关于如何使用这些外观的澄清NSWindow.

NSAppearance.h头文件中,有一条注释声明应该只在一个上设置生动的外观NSVisualEffectsView.没有提到它得到支持NSWindow.

WWDC视频谈论确保您使用图层支持的视图,并且在使用新的充满活力的外观时允许您的子视图充满活力,但同样,没有提及使用它们NSWindow.

VisualEffectsPlayground示例代码确实有一个类似Facetime的应用程序的示例,它使用暗光振动模式,但它没有工具栏,它使用全内容掩码.

根据该信息,我在我的NSWindowController's windowDidLoad方法中执行以下操作:

[self.window.contentView setWantsLayer:YES];
self.window.appearance = [NSAppearance appearanceNamed:NSAppearanceNameVibrantDark];
Run Code Online (Sandbox Code Playgroud)

而且,果然,我得到一个NSToolbar带有黑色窗口标题栏的黑色.因此看起来它正常工作,但是当我的滚动视图滚动其内容(图像的缩略图)时NSToolbar,窗口标题栏下的标准半透明要么不存在,要么随机出现.似乎没有任何模式.有时当我滚动滚动视图时,内容在工具栏和标题栏下以"模糊"状态显示.其他时候滚动时,工具栏和标题栏只是一个不透明的黑色.(标题栏和工具栏仍然绘制其标题和按钮.)

当我没有为窗口的内容视图请求图层时,我得到的是更多的灰色标题栏和窗口标题,而不是"纯"的黑色标题栏.(我的scrollview的背景颜色可以是白色,深灰色或黑色.)

任何帮助或澄清如何正确配置NSWindow(包含NSToolbar和一个NSScollView)使用新的活力外观将非常感激.

Eon*_*nil 6

这将成为一个黑暗模式窗口.随后,窗口中的所有内容(包括标题栏,工具栏甚至对话框)都将变暗.

    let USE_DARK_MODE = true
    if USE_DARK_MODE {
        window.appearance = NSAppearance(named: NSAppearanceNameVibrantDark)
        window.invalidateShadow()
    }
Run Code Online (Sandbox Code Playgroud)

invalidateShadow似乎不需要,但有时如果缺少影子不能正常工作.(OS X 10.10)