如何使用Swift在Cocoa App中设置NSView的颜色()

【如何使用Swift在Cocoa App中设置NSView的颜色()】少年辛苦终身事,莫向光阴惰寸功。这篇文章主要讲述如何使用Swift在Cocoa App中设置NSView的颜色?相关的知识,希望能为你提供帮助。
我曾经为ios开发,我不明白为什么我不能在主视图中轻松改变NSViews的背景颜色。
假设我有一个带有主视图的视图控制器。在这个视图中我添加了3个自定义视图,我已经设置了它们的约束以适应主视图。
我已经为我的视图控制器创建了3个插座:

@IBOutlet weak var topView: NSView! @IBOutlet weak var leftView: NSView! @IBOutlet weak var rightView: NSView!

如何使用Swift在Cocoa App中设置NSView的颜色()

文章图片

在那之后,我试图设置这些视图的背景,但不能这样做。我运行应用程序时看不到任何颜色变化。
这是我为自定义视图显示颜色时添加的代码:
override func viewDidLoad() { super.viewDidLoad()self.view.wantsLayer = trueself.topView.layer?.backgroundColor = NSColor.blue.cgColor self.rightView.layer?.backgroundColor = NSColor.green.cgColor self.leftView.layer?.backgroundColor = NSColor.yellow.cgColor }

它没有显示任何内容(我的观点没有背景颜色):
如何使用Swift在Cocoa App中设置NSView的颜色()

文章图片

我无法理解为什么这段代码不起作用。为什么设置NSView的颜色如此困难(虽然在iOS开发中这么容易)?我正在使用Xcode 8并使用Swift 3编写代码。
答案你应该为你的子视图设置wantsLayertrue,而不是你的超级视图。
self.topView.wantsLayer = true self.rightView.wantsLayer = true self.leftView.wantsLayer = true

另一答案图层方法很方便,但它会产生一个可怕的问题,除非你有一个非常深的背景,一个明亮的文字颜色(反之亦然......我不记得哪个是哪个。)对于NSTextField标签。不像Cocoa Touch,它允许你改变UIView对象的背景颜色,不幸的是,你必须在Cocoa中继承NSView,如下所示。
import Cocoaclass RedView: NSView { override func draw(_ rect: NSRect) { super.draw(rect)let color = NSColor.red color.set() NSRectFill(rect) } }

然后根据您在接口构建器的标识检查器下调用子类(此处为RedView)的任何内容设置类名。如果要以编程方式更改背景颜色,请将视图对象连接起来。然后执行以下操作。
import Cocoaclass MyView: NSView { // MARK: - Variables var backgroundColor = NSColor()// MARK: - Draw override func draw(_ rect:NSRect) { super.draw(rect) backgroundColor.set() NSRectFill(rect) }// MARK: - Method func changeBackgroundColor(color: NSColor) { backgroundColor = color setNeedsDisplay(self.bounds) } }

然后,您可以从视图控制器调用changeBackgroundColor,如...
@IBOutlet weak var myView: MyView! myView.changeBackgroundColor(color: NSColor.green)


    推荐阅读