2011-01-28 9 views
1

私は3つのNSViewをCocoaアプリケーションに、それぞれ別のサブビューを持っています。トランスペアレントなNSImageを描画するとすべてのNSViewが透明になります

FirstNSView - > SecondNSView - > ThirdNSView

FirstNSViewは、コアグラフィックスを用いた固体背景の塗りつぶしを描画します。

SecondNSViewは他の多くのビューのコンテナビューです。

ThirdNSViewはdrawRectに次のコードを使用して、そのフレームにNSImageではを描く:それはほとんどimgの非透過領域のためのマスクとして機能する画像を許可するので、私はNSCompositeDestinationAtopを使用しています

[img drawAtPoint:NSMakePoint(0, 0) fromRect:NSMakeRect(0, 0, img.size.width, img.size.height) operation:NSCompositeDestinationAtop fraction:1.0];

しかし、imgの透過領域は、私が期待しているようにFirstNSViewまで表示するのではなく、ウィンドウ全体を透明にします。他の複合タイプの実験をすることは、まだこの同じ問題につながるたこと

enter image description here

注:そうのように。

私はNSViewsが「レイヤー化」の対象ではないことについて多くのことを読んだことがありますが、ここで関連性があるかどうかは分かりません。これまでNSViewにコアグラフィックスを使用し、レイヤーを「後ろに」公開している透明なセクションを使って細かい描画を行ってきました。この問題が発生したのは、この画像を合成することだけです。

私はこれがなぜ起こっているのか、それを解決するための方法についての参考になりました。

答えて

-1
[img drawAtPoint:NSMakePoint(0, 0) fromRect:NSMakeRect(0, 0, img.size.width, img.size.height) operation:NSCompositeDestinationAtop fraction:1.0]; 

それは画像がほとんどimgの非透過領域のためのマスクとして機能することができますので、私はNSCompositeDestinationAtopを使用しています。

どちらの画像ですか? imgのアルファチャンネルをマスクとして使用する場合は、NSCompositeSourceOverです。

DestinationAtopは、画像がウィンドウの下に表示されるようにするためのものです。そのため、ウィンドウ内の透明領域から画像を確認する必要があります。

しかし、imgの透過領域は、私が期待しているようにFirstNSViewに表示するのではなく、ウィンドウ全体を透明にします。これと同じように:

[スクリーンショット]

私はそのスクリーンショットからは何も言うことができません。それはちょうど私にランダムな色の形の束のように見えます。

NSViewについては、「レイヤー化」は意味がありませんが、ここではそれが適切かどうかは分かりません。

これはありません。オーバーラップ兄弟ビューの原因の問題。

+0

スクリーンショットの紫色が私のデスクトップです。あなたが見ることができるように、紫は複合画像である灰色の矢印の下にあります。いいえ、NSCompositeSourceOverは必要ありません。http://i.imgur.com/LZgxk.pngにつながります。私は元の絵のように効果を欲しがっているが、デスクトップは現時点では見えない。 – JoeR

関連する問題