为啥窗口背景在全屏时保持黑色?
Posted
技术标签:
【中文标题】为啥窗口背景在全屏时保持黑色?【英文标题】:Why does the window background remain black in fullscreen?为什么窗口背景在全屏时保持黑色? 【发布时间】:2015-08-27 13:17:03 【问题描述】:我创建了一个没有标题的窗口-
override func windowDidLoad()
super.windowDidLoad()
self.window?.styleMask = NSBorderlessWindowMask
self.window?.movableByWindowBackground = true
我已经设置 canBecomeKeyWindow by-
override var canBecomeKeyWindow:Bool
get
return true
我改变了容器视图的背景颜色-
override func drawRect(dirtyRect: NSRect)
super.drawRect(dirtyRect)
var viewcolor = NSColor.whiteColor()
viewcolor.setFill()
NSRectFill(dirtyRect)
自定义视图作为子视图添加到此容器视图中,我更改了自定义视图的背景颜色-
override func drawRect(dirtyRect: NSRect)
super.drawRect(dirtyRect)
NSColor(SRGBRed: 0.8, green: 0.26, blue: 0.33, alpha:1.0).set()
NSRectFill(self.bounds)
现在当我做一个toggleFullscreen之类的-
@IBAction func goFullScreen(sender: AnyObject)
self.view.window?.toggleFullScreen(sender)
屏幕的整个区域没有被填满。创建的窗口后面有空白(黑色)背景。应用程序应填满空间,此截图中不应有黑色背景
如何解决此问题。感谢您的帮助。
【问题讨论】:
如果您不将窗口切换到全屏,您可以将其调整到您想要的大小吗?我的猜测是你有限制窗口大小的约束,或者你设置了窗口的maxSize
或contentMaxSize
。
没有。我没有窗口的最大尺寸或最小尺寸。我还想补充一点,如果我删除“self.window?.styleMask = NSBorderlessWindowMask”行,切换工作正常。但是窗口会有我不想要的标题。
你试过NSBorderlessWindowMask | NSResizableWindowMask
吗?
是的!!!。我从过去 2 小时开始拉头发。这非常有效。
@KenThomases,我认为你应该发布你的建议作为答案。所以OP可以接受它。
【参考方案1】:
问题是您的窗口无法调整大小。将styleMask
设置为NSBorderlessWindowMask
无意中删除了NSResizableWindowMask
。
您应该将styleMask
设置为NSBorderlessWindowMask | NSResizableWindowMask
。
【讨论】:
【参考方案2】:dirtyRect 并不总是等于边界。所以,在一个窗口的drawRect
调用NSRectFill(self.bounds)
代替。填充操作不会影响整体绘图性能。
或者您可以在调整大小处理程序中使用setNeedsDisplay
调用将整个窗口矩形标记为脏,并且只能使用脏区域。
如果您意识到可能会出现性能下降的问题,您可以将窗口的内容标记为支持图层并将图层的颜色设置为白色 - 这样会更有效率(如果您在其上执行任何动画,这也是最佳选择看法)。
Apple 在Optimizing View Drawing 主题中描述了更多技术,您可能会觉得有帮助。
【讨论】:
更改为 self.bounds 没有帮助。不过谢谢你的提示。 您是否设置了自动布局约束以在窗口调整大小时对齐子视图? 添加了子视图中的约束。请参阅我上面的评论“我还想补充一点,如果我删除行”self.window?.styleMask = NSBorderlessWindowMask,切换工作正常。但是随后窗口将具有我不想要的标题。">>对此有任何想法吗? 你能提供一些示例项目吗?对我来说,这看起来像是一个 AppKit 错误。 解决了。我需要将掩码修改为 NSBorderlessWindowMask | NSResizableWindowMask..只有 NSBorderlessWindowMask 会导致这个问题。以上是关于为啥窗口背景在全屏时保持黑色?的主要内容,如果未能解决你的问题,请参考以下文章
防止 MPMoviePlayerController 在全屏时旋转和缩放为纵向
MpMovieplayerController 点击手势识别器在全屏时不会触发