0

我想在我的 NSTextView 中添加一个 NSVisualEffectView,但是当我添加它时,文本位于 NSVisualEffectView 下方,那么,如何在文本下方添加 NSVisualEffectView?

我的 OS X 代码:

class myTextView: NSTextView {

    override func awakeFromNib() {
        let visualEffectView = NSVisualEffectView(frame: NSMakeRect(20, 20, 30, 18))
        visualEffectView.material = NSVisualEffectMaterial.Dark
        visualEffectView.blendingMode = NSVisualEffectBlendingMode.BehindWindow
        self.addSubview(visualEffectView)
    }
}
4

2 回答 2

0
self.sendSubviewToBack(visualEffectView)

但是视觉效果需要应用于父容器,而不是文本视图本身,所以如果我正确理解您的代码,您需要将整个事情移动到父视图的任何内容。

于 2015-08-16T01:00:40.303 回答
0

也许这会帮助你:

class MyTextView: NSTextView {

    lazy var visualEffectView: NSVisualEffectView = {
        let visualEffectView = NSVisualEffectView()
        visualEffectView.material = NSVisualEffectMaterial.Dark
        visualEffectView.blendingMode = NSVisualEffectBlendingMode.BehindWindow

        return visualEffectView
    }()

    override func awakeFromNib() {
        super.awakeFromNib()

        self.drawsBackground = false
    }

    override func viewDidMoveToSuperview() {
        super.viewDidMoveToSuperview()

        if let containerView = self.superview?.superview?.superview {
            containerView.addSubview(self.visualEffectView, positioned: .Below, relativeTo: self)
        }
    }

    override func resizeSubviewsWithOldSize(oldSize: NSSize) {
        super.resizeSubviewsWithOldSize(oldSize)

        if let superview = self.superview?.superview {
            self.visualEffectView.frame = superview.frame
        }
    }

}

它是滚动视图和剪辑视图中的文本视图,因此您必须获取它的超级视图。

于 2015-08-16T01:19:42.150 回答