osx – 如何创建具有半透明/模糊背景的优胜美地风格的视图?

在优胜美地侧栏有半透明的“充满活力”的背景。如何创建一个如10.10 / Xcode 6中的视图?

我可以给任何视图这样的背景吗?我发现NSOutlineView将默认为这样的背景,当你给它“源列表”突出显示风格,但在Calendar.app的边栏不显示为一个NSOutlineView,所以我想知道是否有一个通用的解决方案。

最佳答案
随着OSX操作系统的Yosemite版本的引入,苹果向Cocoa窗口和窗口组件引入了一种称为“活力”的模式,这是一种光漫射模糊。它就像看着淋浴门,并使用NSVisualEffectView。苹果explains this effect here

我在NSView上使用这个类别。
只需打电话给你想要的视图,使生机勃勃。
它也向后兼容预优胜美地。 (如果你有一个优胜美地,你不会看到效果)

@implementation NSView (HS)

-(instancetype)insertVibrancyViewBlendingMode:(NSVisualEffectBlendingMode)mode
{
    Class vibrantClass=NSClassFromString(@"NSVisualEffectView");
    if (vibrantClass)
    {
        NSVisualEffectView *vibrant=[[vibrantClass alloc] initWithFrame:self.bounds];
        [vibrant setAutoresizingMask:NSViewWidthSizable|NSViewHeightSizable];
        // uncomment for dark mode instead of light mode
        // [vibrant setAppearance:[NSAppearance appearanceNamed:NSAppearanceNameVibrantDark]];
        [vibrant setBlendingMode:mode];
        [self addSubview:vibrant positioned:NSWindowBelow relativeTo:nil];

        return vibrant;
    }

    return nil;
}

@end

来自@Volomike的详细说明

如何使用

>将AppKit.framework添加到您的项目设置>构建阶段>链接二进制与库,以便它可以识别NSVisualEffectView。
>将您的主窗口的默认视图(而不是窗口本身)的出口委派给您的AppDelegate.m或AppDelegate.mm文件。 (如果你是新的,read this tutorial.)为了这里的目的,让我们假设你命名为mainview,然后可以在代码中寻址为_mainview。
>在项目中包含类别。如果你是新的,在AppDelegate.m或AppDelegate.mm文件中的任何@implementation行之前添加类别。
>在您的AppDelegate.m或AppDelegate.mm文件中,在您的@implementation AppDelegate中,在您的applicationDidFinishLaunching类方法中,添加以下代码行:

[_mainview insertVibrancyViewBlendingMode:NSVisualEffectBlendingModeBehindWindow];

>现在你需要学习如何添加一些代码来给你的窗口上的其他元素,以及窗口本身,半透明。半透明将允许此效果根据需要显示到窗口组件中。这是explained here

现在的净效果是,或者标题栏下面的整个窗口,或者只是你想要的部分(如边栏),将显示这种活力的效果。

转载注明原文:osx – 如何创建具有半透明/模糊背景的优胜美地风格的视图? - 代码日志