是app显示在屏幕上的一个窗口。
Overview 概述
一个NSWindow对象最多对应一个窗口,窗口的两个主要功能是提供可以放置视图的区域,并接受和分发用户通过鼠标和键盘操作发起的事件到适当的视图。
注意:
尽管NSWindow类继承了NSResponder的NSCoding协议,但该类不支持编码。存在对存档器的遗留支持,但其使用已弃用,可能无效。任何使用键控编码对象归档或取消归档窗口对象的尝试都会引发invalidArgumentException异常。
创建Windows:
init(contentViewController: NSViewController)
创建一个命名的window,它包含了指定的内容视图控制器。
Note: NSViewController管理NSWindow内容的展示。NSWidnow的内容有contentViewController和contentView决定。contentViewController是NSViewController的一个实例,用NSViewController管理NSWindow内容的展示更方便。
init(contentRect: NSRect, styleMask: NSWindow.StyleMask, backing: NSWindow.BackingStoreType, defer: Bool)
contentRect: 屏幕坐标中窗口内容区域的原点和大小, 原点为+-16000, 大小为10000.
styleMask:窗口样式,可以包含NSWindow.StyleMask中的任意选项
backing:指定窗口设备如何缓冲窗口中完成的绘图,可能的值有NSWindow.BackingStoreType
defer:直到widnow被移到屏幕上时才会创建。所有发送到窗口或者视图的显示消息都会被延迟,直到创建窗口。
var window = NSWindow(contentRect: NSMakeRect(0, 0, (NSScreen.main?.frame.width)! , (NSScreen.main?.frame.height)!), styleMask: NSWindow.StyleMask.borderless, backing: NSWindow.BackingStoreType.buffered, defer: false)
var pos = NSPoint()
pos.x = (NSScreen.main?.frame.minX)!
pos.y = (NSScreen.main?.frame.minY)!
window.setFrameOrigin(pos)
window.alphaValue = 1
window.isOpaque = true
window.backgroundColor = NSColor(calibratedRed: 0, green: 0, blue: 0, alpha: 1)
window.makeKeyAndOrderFront(nil)
window.level = NSWindow.Level(rawValue: Int(CGWindowLevelForKey(CGWindowLevelKey.overlayWindow)))
init(contentRect: NSRect, styleMask: NSWindow.StyleMask, backing: NSWindow.BakingStoreType, defer: Bool, screen: NSScreen?)
for screen in NSScreen.screens{
var window = NSWindow(contentRect: NSMakeRect(0, 0, screen.frame.width, screen.frame.height), styleMask: NSWindow.StyleMask.borderless , backing: NSWindow.BackingStoreType.buffered, defer: false, screen: screen)
window.makeKeyAndOrderFront(nil)
}
窗口配置:
func toggleFullScreen(Any?)
使窗口进入或者退出全屏模式
var worksWhenModal: Bool
只读属性,指示窗口是否能够接收鼠标键盘事件,即使某些其他窗口正在以模态方式运行。
var alphaValue: CGFload
窗口的alpha值。
var backgroundColor: NScolor!
窗口的背景颜色
var isOpaque: Bool
是否不透明
var contentView:NSView?
窗口的内容视图,在窗口视图层级结构对象中,NSView对象具有最高层级的访问能力。
window保留了他的新的内容视图,view对象会被调整到与window内容区域合适的大小。 我们可以通过bounds来修改内容视图的坐标系, 但是不可以直接修改frame的坐标或者大小。
设置该值会将老的content view释放,如果我们要复用他,确保在设置值之前保留他,并将其添加到另一个NSWidnow或者NSview对象时适当地释放它。
var contentViewController: NSViewController?
窗口的主要内容视图控制器
该属性值提供了当前window的内容视图。设置该值时,移除了contentView现有的值,然后将contentViewController.view 变成了window的主要内容视图。
内容视图控制器仅仅控制contentView对象,并不管理window的title。使用以下代码可以轻松的将title绑定到contentViewController对象:【window bind:NSTitlebinding toObject:contentViewController withKeyPath:@"title" options:nil】. 设置contentViewController会根据当前contentViewcontroller的大小来重置大小。可以使用自动布局来控制window的大小。直接指定contentView值会清除根视图控制器。
var delegate:NSWindowDelegate?
窗口的代理
var windowController: NSWindowController?
窗口的窗口控制器。
窗口的加载
xib加载和关闭窗口
NSApplication启动时,加载xib文件,并初始化窗口对象并显示它,启动完毕后,将该窗口变为键盘窗口。
关闭窗口的过程比较简单,先调用close()方法,然后执行orderOut()方法。
Storyboard加载和关闭窗口
NSApplication启动时,通过NSWindowController调用showWindow方法来控制窗口的。
网友评论