3

Mac アプリのラベルに内側の影を付けようとしています。

デザイナーが送った Photoshop のデザインと一致させようとしています。私が一致させようとしている外観は次のとおりです。 フォトショップデザイン

Photoshop でこれを行う方法は、次の設定でインナー シャドウを設定することです。 Photoshop の設定

他のサイトでこの種のことに対するいくつかの異なる解決策を見てきましたが、どれも正しく機能しません.

たとえば、誰もが使用すると言います:

[[myNSTextField cell] setBackgroundStyle:NSBackgroundStyleRaised];

NSBezierPath などでインナー シャドウを実行することについて多くのことを見つけましたが、ラベルは使用しませんでした。

質問に対するこの回答では、上記の setBackgroundStyle を使用するように指示されてから、

たとえば、 NSGradient でカスタムビューを使用することにより、グラデーションの背景に到達できます

しかし、このビューはどこに行くのでしょうか? 回答が参照するリンクは、テキストではなく、ウィンドウに再び内側の影を付けることについて語っています。

誰でもこれで私を助けることができますか?

ありがとう

4

2 に答える 2

4

この効果は、Photoshop で非常に簡単に作成できます。残念ながら、Cocoa アプリケーションではそれほど単純ではありません。標準のコントロールでそれを行う簡単な方法はわかりませんが、問題をどのように処理するかを説明します.

問題は、オブジェクトによって影が落とされなければならないことです。つまり、影は常にモーダルであり、実際のオブジェクトなしで影を描くことはできません。コア グラフィックスでは、影は描画コンテキストのプロパティです。オブジェクトをレンダリングするとき、プロセスに影の効果を追加できます。

さて、本当の問題がわかれば、解決策は簡単です:)

ここに、テキストから生成された画像があるとしましょう。テキストをビットマップ コンテキストにレンダリングする方法の例をインターネットで見つけることができます。

ここに画像の説明を入力

次のことだけを行う必要があります。

それを反転します。

ここに画像の説明を入力

シャドウをイメージに落としてレンダリングします (ビットマップ コンテキスト)。

ここに画像の説明を入力

反転した画像を除外して画像をマスクします。

ここに画像の説明を入力

あなたが持っている背景テクスチャに結果の画像をレンダリングします。

ここに画像の説明を入力

NSView サブクラスを作成し、これらすべてをレイヤーに描画します。独自のビットマップ コンテキストを作成して描画する方法の例を見つけることができます。マスクの使用方法は次のとおりですhttps://developer.apple.com/library/mac/#documentation/graphicsimaging/conceptual/drawingwithquartz2d/dq_images/dq_images.html

これが役立つことを願っています。

于 2012-11-08T04:18:11.827 に答える