首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >将透明的NSWindow永久地放在另一个NSWindow上

将透明的NSWindow永久地放在另一个NSWindow上
EN

Stack Overflow用户
提问于 2012-02-03 11:43:05
回答 2查看 9.2K关注 0票数 8

我希望在一个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来完成它。

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2012-02-03 13:24:03

孩子的窗户是你所需要的。

使用NSWindow创建NSBorderlessWindowMask,并使用- setOpaque:- setBackgroundColor:方法将其定义为透明。然后添加新创建的窗口作为包含NSWebView实例的窗口的子窗口(使用NSWindow- addChildWindow:ordered:方法)。移动父窗口将自动导致子窗口的移动。

使用工作代码进行更新

代码语言:javascript
运行
复制
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];
票数 21
EN

Stack Overflow用户

发布于 2017-08-08 15:59:18

使用窗口控制器的Swift 3版本:

代码语言:javascript
运行
复制
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")
  }
}
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/9128134

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档