20

Cocoa のドキュメントを読んでいて、10.9 API のいくつかの新機能に出くわしました。

私が集めたドキュメントからNSAppearance、クラスと関連するプロトコルは、とその子孫NSAppearanceCustomizationの外観をカスタマイズする手段であるように見えます。NSView

NSAppearance オブジェクトは、アプリ内の UI 要素のサブセットに適用される標準またはカスタムの外観を指定するファイルを表します。アプリには複数の外観ファイルを含めることができ、NSAppearance は NSCoding に準拠しているため、Interface Builder を使用して UI 要素を外観に割り当てることができます。
通常、Xcode を使用してウィンドウをカスタマイズし、カスタマイズするビューとそれらに適用する必要があるカスタム アートを含む外観ファイルを作成します。Xcode は、ファイルのアート コンテンツを、指定されたビューが表示されたときに AppKit が描画できるランタイム形式に変換します。

それはすべてき​​ちんとしていて有望に思えますが、ドキュメントのどこにも外観ファイルとは何か、またはそれを作成する方法を見つけることができません. 私がすでに読んだ薄いドキュメントを除いて、Google検索は空になります。

UIKit にも同様のサウンドUIAppearanceクラスがあることがわかりますが、これは UIKit クラスをそのまま移植したものではないことがわかります。

これらの魔法の「外観ファイル」の 1 つを作成する方法と、それらを使用して正確に何ができるかを知っている人はいますか?

4

2 に答える 2

11

uicatalog ファイルを処理する「CoreThemeDefinition」と呼ばれるプライベート フレームワークがあります。これらのファイルは「.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 を使用すると、描画している環境を識別できます。正直なところ、私はまだ使用していませんが、私が見つけたほとんどの情報は、Cocoa の新機能に関する WWDC 2013 のビデオと10.9 のリリース ノートにありました。

私の理解では、特定の背景でコントロールがどのように見えるかを指定できます。使用するコントロールを別の背景で再利用する場合は、現在の外観を確認し、それに応じてコントロールを描画できます。[NSAppearance currentAppearance]

もう 1 つの重要な部分は、ビューの外観を指定できるNSAppearanceCustomization プロトコルと呼ばれる、ビューまたはウィンドウが採用できる新しいプロトコルがあることです。これがどのように機能するかは正確にはわかりませんが、そこにあります。一部の Cocoa コントロールには、コントロールの HIG で説明されているこれらが実装されています。

Apple が定義する外観は 2 つありますが、独自の文字列を使用して独自の外観を定義できる場合があります (これも定かではありません)。リンク先のドキュメントの下部に、次の 2 つの定数があります。

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

したがって、これは UIAppearance ではなく、描画している背景の種類を知るための手段にすぎません。

于 2013-11-05T03:50:54.583 に答える