透明背景NSWindow没有恢复

时间:2015-09-23 07:45:55

标签: macos swift cocoa transparent nswindow

我有一个自定义的NSWindow(BorderlessWindow.swift)和NSView(TransparentView.swift),我在TransparentView中添加了一个标签(NSTextField)。

当我隐藏标签时,不会恢复TransparentView:

隐藏捕获图像之前:

enter image description here

隐藏捕获图像后:

enter image description here

我该如何解决?

BorderlessWindow.swift

echo $this->getLayout()->createBlock('inchoo_socialconnect/google_button')->setTemplate("inchoo/socialconnect/google/button.phtml")->toHtml();
echo $this->getLayout()->createBlock('inchoo_socialconnect/facebook_button')->setTemplate("inchoo/socialconnect/facebook/button.phtml")->toHtml();

TransparentView.swift

class BorderlessWindow: NSWindow {

override init(contentRect: NSRect, styleMask aStyle: Int, backing bufferingType: NSBackingStoreType, `defer` flag: Bool) {

    super.init(contentRect: contentRect,
        styleMask: NSBorderlessWindowMask,
        backing: NSBackingStoreType.Buffered,
        `defer`: false)

    self.alphaValue = 1.0
    self.opaque = false
    self.movableByWindowBackground = true

}

@IBOutlet weak var testString: NSTextField!

@IBAction func clicked(sender: NSButton) {
    if testString.hidden == false {
        testString.hidden = true
    }
    else {
        testString.hidden = false
    }
}

override var canBecomeKeyWindow:Bool {
    get {
        return true
    }
}

required init?(coder: NSCoder) {
    super.init(coder: coder)
}

我发现: 当textField的hidden属性的初始值为true时(textfield初始化为隐藏状态),它可以正常工作。

1 个答案:

答案 0 :(得分:0)

对于具有透明部分的窗口,您需要在更改绘制内容后使阴影无效。阴影是从不透明(或大部分不透明)的部分计算出来的,因此完全依赖于绘制的内容。

因此,在您更改绘制方式后,无论是隐藏视图还是重绘它们,都需要在窗口上调用invalidateShadow()