NSRect 是 macOS AppKit 中用来表示矩形区域的结构体,它描述了一个矩形的位置和大小,等价于 iOS 中的 CGRect。
基本结构
struct NSRect {
var origin: NSPoint // 起点(左下角)
var size: NSSize // 尺寸(宽度和高度)
}
NSPoint = x 和 y
NSSize = width 和 height
基本用法
let rect = NSRect(x: 100, y: 200, width: 30, height: 40)
这个矩形:左下角位于屏幕坐标 (100, 200),宽度是 30,高度是 50。

构造方法
1、简单写法
let rect = NSRect(x: 0, y: 0, width: 200, height: 100)
2、完整写法
let origin = NSPoint(x: 0, y: 0)
let size = NSSize(width: 200, height: 100)
let rect2 = NSRect(origin: origin, size: size)
常用属性和方法
1、rect.origin.x / y:起点坐标。
2、rect.size.width / height:尺寸。
3、rect.minX / maxX:最小/最大 X 值。
4、rect.minY / maxY:最小/最大 Y 值。
5、rect.midX / midY:中点坐标。
6、rect.contains(point):是否包含某个点。
7、rect.intersects(anotherRect):是否与另一个矩形相交。
8、rect.insetBy(dx:dy:):缩小(或扩大)矩形。
9、rect.offsetBy(dx:dy:):移动矩形位置。
使用场景
1、设置窗口初始大小
let window = NSWindow(
contentRect: NSRect(x: 200, y: 200, width: 800, height: 600),
styleMask: [.titled, .closable],
backing: .buffered,
defer: false
)
2、设置子视图的位置和大小
let button = NSButton(frame: NSRect(x: 20, y: 20, width: 100, height: 40))
view.addSubview(button)
3、在draw(_:)方法中绘图
override func draw(_ dirtyRect: NSRect) {
let box = NSRect(x: 10, y: 10, width: 100, height: 50)
NSColor.red.setFill()
box.fill()
}
注意事项
AppKit 的坐标系统默认原点在左下角(不像 iOS 的左上角),可以通过子类设置 isFlipped = true 改变:
override var isFlipped: Bool { true }
总结
NSRect是一个矩形(位置+尺寸),由NSPoint + NSSize构成,用于控件布局、绘图、坐标计算、命中测试等。