为NSView设置背景色

macOS(以前称为OS X)开发一直是我的一个充满激情的项目。 首先就是要进入应用程序开发。 我从未真正想为iPhone制作应用程序,我想为macOS设计出色的应用程序,从而帮助了我。 就我而言,不幸的是,据我所知,奥斯陆的macOS开发人员市场并不存在。 不要误会我的意思,我非常喜欢为iPhone,iPad和AppleTV制作应用程序,但是我从未忘记自己的根源以及一切的开始方式。 我一直试图使其通过爱好项目,并在可行的情况下为我贡献的所有框架添加支持macOS。

您可能想知道当谣言指向Apple统一API时使我花时间的原因,从而使macOS更类似于iOS / tvOS的对应部分。 好吧,我们还没有活在那个未来,我很享受。 就这么简单。

在经过较长的iOS / tvOS开发后回到macOS之后,我可以看到它是如何“变质”的。移动开发人员很方便。 iOS起源于macOS,但是Apple做出了巨大的贡献,为我们的开发人员简化了日常操作。 因为我感觉到macOS的开发正逐渐成为一种迷失的艺术形式,所以我将开始分享一些技巧,窍门和说明,这些内容是我为Mac编程时偶然发现的。

我们将从简单的内容开始,将背景色设置为常规视图。 即使这对于许多人来说似乎很明显,但对于某些人来说可能并不是那么简单,尤其是如果您已经被便利所困扰。

首先,让我们看一下这是如何在iOS和tvOS上完成的。

这是非常简单的方法,我们创建带有框架的UIView并使用UIColor设置背景色。

因此,让我们为macOS做等效的事情。

创建视图是“相同但不同”,而不是UIView而是创建NSView ,但是您可能已经知道这一点。 因此,让我们进一步看一下这两个视图的偏离位置。

UIView是用于设置背景颜色的属性,而NSView缺少一种。 相反,您必须在视图层上设置背景色。 为了使事情更不方便,默认情况下, NSView没有附加图层。 要获得一个,必须将wantLayer设置为true 。 这将创建一个图层并将其分配给视图上的可选layer属性。 这将使您的视图层化。 最后但并非最不重要的一点是,因为我们将背景色设置为图层,所以我们不能直接使用NSColor而是必须使用CGColor ,这当然很容易做到,但与iOS相比却不是那么方便。

那么,为什么NSView上的layer是可选的,文档有助于对此有所了解:

将此属性的值设置为true会将视图转换为层支持的视图-即,该视图使用CALayer对象管理其呈现的内容。 创建隐含层的视图会隐式地导致该视图下的整个视图层次结构成为隐层的。 因此,该视图及其所有子视图(包括子视图的子视图)将成为层支持的。 此属性的默认值为false。

https://developer.apple.com/documentation/appkit/nsview/1483695-wantslayer

就是这样,这就是我们为NSView设置背景色的方式。
我的目标是分享更多的琐碎和非琐碎的任务,力求使它简短而有趣。