macOS颜色NSColor
macOS颜色NSColor

macOS颜色NSColor

NSColor 是 macOS AppKit 中用来表示颜色的类,等价于 iOS 中的 UIColor。在 macOS 应用用于中设置视图背景、绘图、文字颜色、按钮颜色等。

常见用途

1、设置 NSView 背景颜色:view.layer?.backgroundColor = NSColor.red.cgColor

2、绘图:NSColor.blue.setFill(); path.fill()

3、设置文字颜色:label.textColor = NSColor.labelColor

4、设置图层边框颜色:view.layer?.borderColor = NSColor.gray.cgColor

创建颜色

1、系统内置颜色

NSColor.red
NSColor.blue
NSColor.green
NSColor.black
NSColor.white
NSColor.gray

2、macOS专属系统颜色(自动适配浅/深色)

NSColor.labelColor
NSColor.textColor
NSColor.windowBackgroundColor
NSColor.separatorColor
NSColor.controlAccentColor

这些颜色会根据系统的浅色/深色模式自动调整,非常适合做适配。

3、自定义颜色(RGB)

NSColor(red: 0.5, green: 0.2, blue: 0.7, alpha: 1.0)

所有值都是 CGFloat,范围 0.0 ~ 1.0。

4、灰度颜色

NSColor(white: 0.8, alpha: 1.0) // 浅灰色

填充颜色方式

1、使用cgColor实现图层填充

这种方式设置的是 CALayer 的属性,适用于需要快速设置背景色、圆角、边框、阴影等:

view.wantsLayer = true
view.layer?.backgroundColor = NSColor.systemGreen.cgColor
view.layer?.cornerRadius = 8

2、使用set(填充+描边)

同时设置填充色 + 描边色,等价于 setFill + setStroke。

NSColor.orange.set()

let path = NSBezierPath(ovalIn: NSRect(x: 10, y: 10, width: 80, height: 80))
path.fill()    // 填充用 orange
path.stroke()  // 描边也用 orange

3、使用 .setFill 和 setStroke 分别填充和描边

用于在 draw(_:) 方法中做自定义绘图:

override func draw(_ dirtyRect: NSRect) {
    NSColor.red.setFill()
    NSColor.black.setStroke()
    
    let path = NSBezierPath(ovalIn: NSRect(x: 10, y: 10, width: 100, height: 100))
    path.fill()     // 填充是红色
    path.stroke()   // 边框是黑色
}

NSColor.set()是如何实现的颜色填充?

NSColor.orange.set()
NSBezierPath.fill(NSRect(x: 0, y: 0, width: 100, height: 100))

当调用NSColor.set()时,会设置当前绘图状态上下文的填充和描边颜色。

使用fill(rect)会调用默认颜色填充路径。

提示:颜色状态是全局性的。

macOS 的 NSGraphicsContext 会保留当前设置的颜色状态,一旦调用了 .set() 或 .setFill(),它就会影响后续所有绘图调用,直到再次修改颜色。

使用场景

1、设置视图背景颜色

let view = NSView(frame: NSRect(x: 0, y: 0, width: 100, height: 100))
view.wantsLayer = true
view.layer?.backgroundColor = NSColor.systemTeal.cgColor

2、在绘图中使用NSColor

override func draw(_ dirtyRect: NSRect) {
    let rect = NSRect(x: 10, y: 10, width: 80, height: 80)
    NSColor.red.setFill()
    rect.fill()
}

3、实现动态颜色(浅色/深色模式)

let adaptiveColor = NSColor { appearance in
    return appearance.name == .darkAqua ? NSColor.white : NSColor.black
}

或者使用系统颜色自动适配:

view.layer?.backgroundColor = NSColor.windowBackgroundColor.cgColor

总结

NSColor可以创建颜色,支持系统颜色、自定义RGB、灰度或动态色。

可以使用 .setFill() 填充、.setStroke() 描边和 .set() 填充+描边。

在图层/视图颜色中,使用 .cgColor 设置 Layer 的颜色。

   

如果您认为这篇文章给您带来了帮助,您可以在此通过支付宝或者微信打赏网站开发者。

欢迎加入我们的 微信交流群QQ交流群,交流更多精彩内容!
微信交流群二维码 QQ交流群二维码

发表回复

您的电子邮箱地址不会被公开。 必填项已用 * 标注