20

我在阅读 Cocoa 文档时偶然发现了 10.9 API 中的一些新特性。

从文档中我收集到NSAppearance该类和相关协议NSAppearanceCustomization似乎是一种自定义外观NSView及其后代的方法。

NSAppearance 对象表示一个文件,该文件指定适用于应用程序中 UI 元素子集的标准或自定义外观。一个应用程序可以包含多个外观文件,并且由于 NSAppearance 符合 NSCoding,您可以使用 Interface Builder 将 UI 元素分配给外观。
通常,您通过使用 Xcode 创建一个外观文件来自定义一个窗口,该文件包含您想要自定义的视图以及应该应用于它们的自定义艺术。Xcode 将文件的艺术内容转换为 AppKit 在显示指定视图时可以绘制的运行时格式。

好吧,这一切听起来都很整洁而且很有希望,但是在文档中我找不到外观文件是什么或如何制作外观文件。除了我已经阅读过的精简文档之外,谷歌搜索结果都是空的。

我确实看到 UIKit 有一个类似的声音UIAppearance类,但据我所知,这不是 UIKit 类的直接端口。

有谁知道如何制作这些神奇的“外观文件”之一以及我们可以用它们做什么?

4

2 回答 2

11

有一个名为“CoreThemeDefinition”的私有框架处理 uicatalog 文件,这些文件可以转换为“.car”文件并使用 NSAppearance 加载。我个人认为 Apple 将来会在 Xcode 中包含一个编辑器,但现在你可以使用我制作的这个小工具:https ://github.com/insidegui/AppearanceMaker

您首先打开应用程序并选择保存 uicatalog 文件的位置,然后单击“创建骨架”。这将导出包含控件默认图像的各种 PSD,然后您可以使用应用程序对其进行编辑、保存和导出汽车文件。

此文件需要包含在您应用的资源中,您可以使用以下方法加载此自定义外观:

[[NSAppearance alloc] initWithAppearanceNamed:@"Your-appearance-name" bundle:nil]
于 2014-04-16T23:50:04.563 回答
5

编辑:Guilherme 的反应更准确,尽管仍然没有像在 iOS 中那样改变外观的公开方式。

NSAppearance 与 UIAppearance 不太像(据我所知),它仅与在正常或浅色外观下的控件有关。这方面的一个例子是,当您绘制到弹出框(灯光)与窗口工具栏(正常)时,NSAppearance 允许您识别您正在绘制的环境。老实说,我还没有使用它,但我发现的最多信息是在 WWDC 2013 视频中关于 Cocoa 的新功能和10.9 发行说明

据我了解,它允许您指定控件在特定背景上的外观。如果您使用的控件要在不同的背景上重复使用,您可以检查当前外观并使用相应地绘制控件[NSAppearance currentAppearance]

另一个重要的部分是您的视图或窗口可以采用一种称为NSAppearanceCustomization 协议的新协议,该协议允许您指定该视图的外观。不完全确定这是如何工作的,但它就在那里。一些 Cocoa 控件也实现了这些在HIG for Controls中讨论的内容。

Apple 定义了 2 种外观,但您可以使用自己的字符串定义自己的外观(同样,不确定)。在您链接到的文档的底部,您会发现这两个常量:

APPKIT_EXTERN NSString *const NSAppearanceNameAqua;
APPKIT_EXTERN NSString *const NSAppearanceNameLightContent;

所以它不是 UIAppearance,它只是一种了解你正在绘制的背景类型的方法。

于 2013-11-05T03:50:54.583 回答