【问题标题】:How to add a blurred view ontop of a view?如何在视图顶部添加模糊视图?
【发布时间】:2011-07-11 22:08:34
【问题描述】:

我有一个重新加载的 NSTableView。在加载新数据时,我想在它上面添加一个带有微调器的子视图。我希望顶部的视图是半透明的,并显示它下面的视图,使其模糊。我该怎么做呢?

【问题讨论】:

    标签: objective-c cocoa macos nstableview nsview


    【解决方案1】:

    您是否尝试过更改视图的 Alpha 属性(用于透明度)? 这里还有一个关于模糊视图的链接: Blur Effect for UIView

    【讨论】:

    • 我宁愿称之为像素化而不是模糊。
    【解决方案2】:

    基本技术是拍摄您的视图的图像,使用类似于NSView‑bitmapImageRepForCachingDisplayInRect: 方法,处理该图像使其模糊(Core Image 是您的朋友),然后覆盖您的视图包含模糊图像的NSImageView

    这当然是假的,但这就是表演的意义:-)

    【讨论】:

      【解决方案3】:

      最简单的解决方案——明显比-bitmapImageRepEtc: 更适用,并且比光栅化缩放方法更适用于 Mac OS——是将覆盖视图设置为使用核心动画支持层,然后给该层一个核心图像模糊滤镜。这是一种在整个 Mac OS 中使用的技术,从 Dock 菜单到菜单栏本身。 Interface Builder 使设置变得非常容易,但您也可以在代码中进行设置,如下所示:

      CALayer *backgroundLayer = [CALayer layer];
      [backgroundView setLayer:backgroundLayer];
      [backgroundView setWantsLayer:YES];
      
      CIFilter *blurFilter = [CIFilter filterWithName:@"CIGaussianBlur"];
      [blurFilter setDefaults];
      
      [backgroundView layer].backgroundFilters = [NSArray arrayWithObject:blurFilter];
      

      【讨论】:

      • 看起来这仅在视图完全覆盖其下方的其他视图时才有效。当它仅部分覆盖它们时,视图下方的整个区域都会变得模糊。
      • 抱歉让这个起死回生 - 'setLayer' 依赖于什么框架?
      • @adib — 你知道解决这个问题的方法吗?
      • 啊,@adib,找到它了:将 maskToClip 设置为 YES 并且它可以工作:) — 并且父视图也必须是 layer-backed。
      【解决方案4】:

      你应该在guthub上查看RMBlurredViewhttps://github.com/raffael/RMBlurredView

      这是一个易于使用的 NSView 子类,可以为您完成所有这些工作。请务必在您的父视图上设置setWantsLayer:YES

      有关详细信息,请查看 Cocoanetics 文章:http://www.cocoanetics.com/2013/10/blurring-views-on-mac/

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2013-09-16
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多