MacOS/IOS开发, AppKit 之 Swift4.2版

01. MacOS/IOS开发,AppKit之 NSWindow

2018-12-10  本文已影响0人  制哥

是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方法来控制窗口的。

上一篇 下一篇

猜你喜欢

热点阅读