首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >圆角NSVisualEffectView

圆角NSVisualEffectView
EN

Stack Overflow用户
提问于 2015-08-17 03:32:36
回答 3查看 2.6K关注 0票数 5

如何在OS中显示带有圆角的NSVisualEffectView?

添加我的NSVisualEffectView的代码:

代码语言:javascript
复制
let visualEffectView = NSVisualEffectView(frame: NSMakeRect(0, 0, 300, 300))
visualEffectView.material = NSVisualEffectMaterial.Dark
visualEffectView.blendingMode = NSVisualEffectBlendingMode.BehindWindow
self.addSubview(visualEffectView)
EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2015-08-17 06:04:37

您可以通过将NSVisualEffectViewwantsLayer设置为true,然后设置支持层的cornerRadius,从而为您的true启用层支持视图:

代码语言:javascript
复制
    let visualEffectView = NSVisualEffectView(frame: NSMakeRect(0, 0, 300, 300))
    visualEffectView.material = NSVisualEffectMaterial.Dark
    visualEffectView.blendingMode = NSVisualEffectBlendingMode.BehindWindow
    visualEffectView.wantsLayer = true
    visualEffectView.layer?.cornerRadius = 15.0
    self.view.addSubview(visualEffectView)

这样就形成了一个圆角好的效果视图:

票数 10
EN

Stack Overflow用户

发布于 2016-07-01 19:26:28

NSVisualEffectView具有一个maskImage属性,您可以使用该属性将视图剪辑成任意形状。

从标题中:

代码语言:javascript
复制
/* The mask image masks this view. It is best to set this to the
   smallest mask image possible and properly set the image.capInsets to
   inform the image on how to stretch the contents when it is used as a
   mask. Setting the maskImage on an NSVisualEffectView that is the
   window.contentView will correctly set the window's shadow.
 */
public var maskImage: NSImage?

例如,您可以使用带有圆角的NSImage,并将其capInsets设置为角半径,将resizingMode设置为.stretch

票数 2
EN

Stack Overflow用户

发布于 2021-12-04 00:35:47

Swift 5.5

对于我的一个应用程序,我做的正是@sam所说的。其结果是:

你需要做的是:

  • 在NSImage上定义一个扩展:
代码语言:javascript
复制
extension NSImage {
    static func mask(withCornerRadius radius: CGFloat) -> NSImage {
        let image = NSImage(size: NSSize(width: radius * 2, height: radius * 2), flipped: false) {
            NSBezierPath(roundedRect: $0, xRadius: radius, yRadius: radius).fill()
            NSColor.black.set()
            return true
        }
        
        image.capInsets = NSEdgeInsets(top: radius, left: radius, bottom: radius, right: radius)
        image.resizingMode = .stretch
        
        return image
    }
}
  • 创建视觉效果视图
代码语言:javascript
复制
private lazy var visualEffectView: NSVisualEffectView = {
    let visualEffectView = NSVisualEffectView()
    visualEffectView.blendingMode = .behindWindow
    visualEffectView.material = .popover
    visualEffectView.state = .active
    visualEffectView.maskImage = .mask(withCornerRadius: 25)
    return visualEffectView
}()

(愉快的编码;)

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/32042385

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档