为什么全屏幕窗口背景保持黑色?

时间:2015-06-11 17:35:25

标签: macos swift cocoa xcode6 storyboard

我创建了一个没有标题的窗口 -

 override func windowDidLoad() {
    super.windowDidLoad()
    self.window?.styleMask = NSBorderlessWindowMask 
    self.window?.movableByWindowBackground = true
}

我已经通过 -

设置了canBecomeKeyWindow
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)


}

屏幕的整个区域未填满。窗口后面有空白(黑色)背景。该应用应填充该空间,此屏幕截图中不应为黑色背景Full screen state

如何解决此问题。谢谢你的帮助。

2 个答案:

答案 0 :(得分:2)

问题是您的窗口无法调整大小。将styleMask设置为NSBorderlessWindowMask无意中删除了NSResizableWindowMask

您应该将styleMask设置为NSBorderlessWindowMask | NSResizableWindowMask

答案 1 :(得分:0)

dirtyRect并不总是等于边界。因此,在窗口drawRect调用NSRectFill(self.bounds)中。填充操作不会影响整体绘图性能。

或者您可以在调整大小处理程序中将setNeedsDisplay调用整个窗口标记为脏,并且只能使用脏区域。

如果您了解可能的性能下降问题,您可以将窗口内容标记为图层备份,并将图层的颜色设置为白色 - 这样会更有效(这也是如果在该视图上执行任何动画,则是最佳选项。

苹果在Optimizing View Drawing主题中介绍的其他一些技巧可能会对您有所帮助。