我有一个自定义的NSWindow(BorderlessWindow.swift)和NSView(TransparentView.swift),我在TransparentView中添加了一个标签(NSTextField)。
当我隐藏标签时,不会恢复TransparentView:
隐藏捕获图像之前:
隐藏捕获图像后:
我该如何解决?
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初始化为隐藏状态),它可以正常工作。
答案 0 :(得分:0)
对于具有透明部分的窗口,您需要在更改绘制内容后使阴影无效。阴影是从不透明(或大部分不透明)的部分计算出来的,因此完全依赖于绘制的内容。
因此,在您更改绘制方式后,无论是隐藏视图还是重绘它们,都需要在窗口上调用invalidateShadow()
。