macos - 如何创建具有半透明/模糊背景的优胜美地风格的 View ?

标签 macos interface-builder nsview osx-yosemite

在优胜美地,侧边栏具有半透明的“充满活力”的背景。如何在10.10 / Xcode 6中创建类似的 View ?

我可以给这样的背景有什么看法吗?我发现当您将NSOutlineView赋予“源列表”突出显示样式时,它会默认使用这种背景,但是Calendar.app的侧边栏似乎不是NSOutlineView,所以我想知道是否有通用的解决方案。

最佳答案

随着OSX操作系统的优胜美地版本的推出,苹果公司对 cocoa 窗和窗组件引入了一种称为活力的新模式,即光扩散模糊。有点像透过淋浴门看,并使用NSVisualEffectView。苹果explains this effect here
我在NSView上使用此类别。
只需调用您想使其充满活力的 View 即可。
它也与优胜美地以前的版本向后兼容。 (如果您之前有优胜美地,将看不到效果)

@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。
  • 主窗口的默认 View (而不是窗口本身)的导出代表设置为 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

  • 现在的净效果是,标题栏下方的整个窗口,或仅您想要的部分(例如侧栏)将显示这种活力效果。

    关于macos - 如何创建具有半透明/模糊背景的优胜美地风格的 View ?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24023183/

    相关文章:

    ios - 如何解决 "Minimum Font Size greater than current font size"?

    swift - 如何在 cocoa NSView 中设置背景图片

    objective-c - 添加 subview 后的 NSView 鼠标事件

    objective-c - NSView 与 CAgradientlayer

    python - Mac 上无法打开空闲状态

    c# - mac 上单声道的 pkg-config 路径

    ios - 在 Xcode 10.2 中调整 View 大小

    在 Mac 上使用 gcc 4.6.1 的 C++11

    macos - docker如何在osx上运行,是否使用流浪汉?

    ios - IBOutlets 没有出现在 iPad Xcode 4 的 Storyboard 中