我希望在一个NSWebView
上有一些UI控件,由于这个问题“https://stackoverflow.com/questions/9120868/video-in-nswebview-hides-views-on-top-of-the-nswebview”,我现在想在https://stackoverflow.com/questions/9120868/video-in-nswebview-hides-views-on-top-of-the-nswebview上添加一个“透明”的NSWindow
,所以没有关闭按钮等等,在我的NSWebView
上,因此,在我当前的NSWindow
之上。
我如何才能做到这一点,并确保这个“覆盖窗口”保持在适当的位置,即使我移动了底层窗口?
编辑::虽然@dzolanta的方法很好,但我想知道是否可以使用允许我正确使用插座等的NSWindowController
来完成它。
发布于 2012-02-03 13:24:03
孩子的窗户是你所需要的。
使用NSWindow
创建NSBorderlessWindowMask
,并使用- setOpaque:
和- setBackgroundColor:
方法将其定义为透明。然后添加新创建的窗口作为包含NSWebView
实例的窗口的子窗口(使用NSWindow
的- addChildWindow:ordered:
方法)。移动父窗口将自动导致子窗口的移动。
使用工作代码进行更新
CGRect wRect = self.window.frame;
NSView *contentView =self.window.contentView;
CGRect cRect = contentView.frame;
CGRect rect = CGRectMake(wRect.origin.x, wRect.origin.y, cRect.size.width, cRect.size.height);
NSWindow *overlayWindow = [[NSWindow alloc]initWithContentRect:rect
styleMask:NSBorderlessWindowMask
backing:NSBackingStoreBuffered
defer:NO];
overlayWindow.backgroundColor = [NSColor redColor];
[overlayWindow setOpaque:NO];
overlayWindow.alphaValue = 0.5f;
[self.window addChildWindow:overlayWindow ordered:NSWindowAbove];
发布于 2017-08-08 15:59:18
使用窗口控制器的Swift 3版本:
final class OverlayWindowController: NSWindowController {
init(frame: NSRect) {
let window = NSWindow(contentRect: frame, styleMask: .borderless, backing: .buffered, defer: false)
super.init(window: window)
window.contentViewController = MyViewController()
window.backgroundColor = NSColor.clear
window.isOpaque = false
}
@available(*, unavailable)
required init?(coder: NSCoder) {
fatalError("init(coder:) is unavailable")
}
}
https://stackoverflow.com/questions/9128134
复制相似问题