gpt4 book ai didi

macos - 透明背景 NSWindow 未恢复

转载 作者:行者123 更新时间:2023-11-28 08:57:28 28 4
gpt4 key购买 nike

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

当我隐藏标签时,TransparentView 没有恢复:

在隐藏捕获图像之前:

enter image description here

隐藏捕获图像后:

enter image description here

我该如何解决?

BorderlessWindow.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)
}

TransparentView.swift

class TransparentView: NSView {

override func drawRect(dirtyRect: NSRect) {

super.drawRect(dirtyRect)

NSColor.clearColor().set()
NSRectFill(self.bounds)

let path = NSBezierPath(roundedRect: self.bounds, xRadius: 10, yRadius: 10)
let path2 = NSBezierPath(roundedRect: NSMakeRect(self.bounds.origin.x + 10, self.bounds.origin.y + 10, self.bounds.size.width - 20, self.bounds.size.height - 20), xRadius: 10, yRadius: 10)

NSColor(calibratedRed: 1, green: 0.7, blue: 0, alpha: 0.5).setFill()
NSColor(calibratedRed: 1, green: 1, blue: 1, alpha: 1).setStroke()

path2.lineWidth = 3.0
path.lineJoinStyle = NSLineJoinStyle.RoundLineJoinStyle
path.lineCapStyle = NSLineCapStyle.RoundLineCapStyle


path2.fill()
path2.stroke()

// Drawing code here.
}



override init(frame frameRect: NSRect) {
super.init(frame: frameRect)
}

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

}

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

最佳答案

对于有透明部分的窗口,需要在改变绘制内容后使阴影失效。阴影是根据不透明(或大部分不透明)部分计算得出的,因此取决于绘制的内容。

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

关于macos - 透明背景 NSWindow 未恢复,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32733820/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com