在 NSTextView 下面添加一个 NSVisualEffectView

Add a NSVisualEffectView below NSTextView

我想在我的 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)
    }
}
self.sendSubviewToBack(visualEffectView)

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

也许这会对你有所帮助:

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
        }
    }

}

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