2013-11-05 20 views
18

我讀的可可文檔和10.9 API在遇到一些新的特點絆倒了。如何爲NSAppearance製作「外觀文件」?

From the docs我收集該NSAppearance類和相關的協議NSAppearanceCustomization似乎是定製的NSView及其後代的外觀的裝置。

NSAppearance對象表示一個文件,該文件指定應用於應用中UI元素子集的標準或自定義外觀。應用程序可以包含多個外觀文件和因爲NSAppearance符合NSCoding - 您可以使用Interface Builder來分配UI元素的外觀。
通常情況下,您可以通過使用Xcode中創建一個包含要自定義的意見,並應適用於他們的定製藝術的外觀文件自定義窗口。 Xcode將文件的藝術內容轉換爲AppKit可以在顯示指定視圖時繪製的運行時格式。

那麼所有的聲音都整齊有希望,但在文檔中我找不到什麼外觀文件或如何製作。除了我已經閱讀過的精簡文檔之外,谷歌搜索將會空無一人。

我確實看到UIKit有類似的sounding UIAppearance類,但是從我可以告訴的是,這不是UIKit類的直接端口。

是否有人知道如何製作這些神奇的「外觀文件」,以及我們可以用它們做些什麼?

+1

有趣這麼久纔得到這個downvote。關於這一點,Mac OS 10.10有所改變嗎? –

回答

9

有一個名爲「CoreThemeDefinition」的私有框架可以處理uicatalog文件,這些文件可以轉換成「.car」文件並使用NSAppearance加載。我個人認爲蘋果未來會在Xcode中包含一名編輯,但現在您可以使用我製作的這個小工具:https://github.com/insidegui/AppearanceMaker

您首先打開該應用並選擇一個地方以保存uicatalog文件,然後你點擊「創建骨架」。這將導出包含控件的默認圖像的各種PSD,然後您可以編輯它們,使用應用程序保存並導出汽車文件。

這個文件需要被包含在你的應用程序的資源,您使用加載這個自定義外觀:

[[NSAppearance alloc] initWithAppearanceNamed:@"Your-appearance-name" bundle:nil] 
+0

你能擴展這個答案在這裏(而不是隻發佈一個鏈接)?如果它實際上包含通過鏈接找到的一些信息,我可能會接受這個答案。 –

+0

編輯更多的信息,謝謝你的提問。 –

+0

這是迄今爲止最接近我可能得到的答案(直到也許蘋果自己做這件事)。公認。 –

5

編輯:Guilherme的回答更準確,雖然仍然沒有公開的方式來改變你的iOS的外觀。

NSAppearance是不是很像UIAppearance(從我可以告訴),它只涉及具有在正常或淺色外觀的控制。當你畫成酥料餅(光)VS窗口工具欄也許(正常)這方面的一個例子是,NSAppearance讓你找出你正在繪製成環境。說實話我還沒有使用它,但我發現的最多信息是在WWDC 2013視頻中有什麼新的Cocoa和10.9 release notes

從我的理解,它允許您指定控件的外觀就像特定的背景一樣。如果您使用的控制是在不同的背景下被重用,你可以查看當前的外觀和繪製相應的使用控制[NSAppearance currentAppearance]

另一個重要部分是,有一個新的協議,你的意見或窗口可以採用被稱爲NSAppearanceCustomization protocol它允許你指定視圖的外觀。不完全確定這是如何工作,但它在那裏。一些可可控制也有這些在HIG for Controls討論的實施。

有出場2次,蘋果定義,但你也許可以用你自己的字符串(同樣,不知道)來定義自己。在您鏈接到你會發現這2個常量的文檔的底部:

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

所以它是沒有UIAppearance,它只是一個知道你正在繪製到什麼類型的背景的方式。

+1

謝謝,我給HIG鏈接+1,它解釋了'NSAppearanceNameLightContent'和'NSAppearanceNameAqua'之間的區別,但是我的問題是關於文檔中引用的「外觀文件」。它不僅討論創建你自己的,而且該類中公開的少數幾個方法是從應用程序包中加載一個(而不是內置的)。 –

+0

@BradAllred我會看看我能否在一段時間內得到一個實例。沒有示例代碼,因此很難確切知道如何使用它。雖然我同意,但聽起來你可以製作自己的NSA外觀對象,但我不確定在IB中如何使用它。 –