我需要在另一个NSView上绘制一个透明的覆盖层,具体来说是一个WebView。目标是显示一些带有半透明背景的通知文本。为了进行第一次实验,我创建了一个Overlay视图,它只显示一个绿色正方形:
然后,在我的代码中,我像这样实例化它们并添加它们:
令我惊讶的是,这只适用于某些页面。例如,如果您转到https://twitter.com/screensavrninja,它会使整个页面变灰,并显示一个弹出式注销框。灰度和弹出式框都出现在绿色方块的上方。
为什么会这样?如何正确地创建覆盖层并使其保持在顶部?
class Overlay: NSView {
override func drawRect(dirtyRect: NSRect) {
NSColor.greenColor().setFill()
NSBezierPath(rect: CGRect(x: 10, y: 10, width: 1000, height: 1000)).fill()
}
}
然后,在我的代码中,我像这样实例化它们并添加它们:
webView = WebView(frame: bounds)
overlay = Overlay(frame: bounds)
addSubview(webView)
addSubview(overlay)
令我惊讶的是,这只适用于某些页面。例如,如果您转到https://twitter.com/screensavrninja,它会使整个页面变灰,并显示一个弹出式注销框。灰度和弹出式框都出现在绿色方块的上方。
为什么会这样?如何正确地创建覆盖层并使其保持在顶部?
NSView.subviews
的文档保持一致: "当前视图充当每个子视图的父视图。 子视图的顺序可以被认为是从后到前,但这并不意味着无效和绘图行为。"哪个是正确的? - Alexander