2011-10-17 13 views
3

私は非常に奇妙な問題があります。私はTexturedウィンドウに通常のグラデーションカラーを持たせたい。このウィンドウにはNSTextFieldがあり、テキストフィールドはURL入力フィールドになるように指定されているため、大きなサイズにする必要があります。問題は、大きすぎる(ウィンドウの幅の約1/3を超える)ときに、テクスチャ付きのウィンドウを切り替えるだけで、それよりも暗いバージョンのグラデーションが描画されることです。NSWindow NStextFieldで背景をテクスチャ化

ここでは、テストするプロジェクトの例(非常に簡単です...)です。

http://raven.ipodtutofast.com/test.zip

あなたは今、ウィンドウを大きくする、それは暗い背景に切り替わり、最初の1は結構です、それはウィンドウの背景に気づく構築して実行します。

これを修正する方法については、実際にはわかりません。

アップデート:ココアヒーローのおかげで、IBのコンテンツの境界設定でカスタムを選択するだけで、グラデーションの高さを任意の値に設定できます。

答えて

12

これは、ウィンドウの「コンテンツの境界線」設定に関連しているようです。 IBでnoneに設定すると、問題は発生しませんが、グラデーションも変更されます。私にはバグのようだ。おそらくレーダーの時間?

+0

あなたはただ問題を解決しました。コンテンツ境界線をカスタムに設定するだけで、グラデーションサイズをカスタマイズできます。わたしは、あなたを愛しています ! – Dimillian

+4

あなたが私を愛しているなら、投票して答えとして選択してください! = Dああ、私もあなたを愛しています。 – cocoahero

+0

だから最終的にifはおそらくappkitバグですが、簡単に解決できます。本当にありがとう、私はこのNSTextFieldのためにカスタムウィンドウを描画しようとしていました。 http://raven.ioの新しいUIを保存するだけです。 – Dimillian

4

上記のグラデーションの問題がアプリケーションのTexture NSWindowsでも発生しましたが、この問題を解決するのに長い時間がかかりました。

この投稿にもう少し追加したいと思っています。他の開発者が解決策が今後より簡単に出てくるという同じ問題が発生していることが分かった場合は、

私の場合は、一連のテクスチャ付きウィンドウでアプリケーションを構築しました。 Dimillian77の問題と同様に、私のアプリケーションのメインウィンドウの背景テクスチャは、サブビューのサイズと配置の影響を受けていました。私のケースでは、メインウィンドウのNSWindowControllerがNSWindowControllerのユーザーがアクセスしているアプリケーションNSViewのサブビューのサイズと配置が各サブビューごとにわずかに異なるため、メインウィンドウの背景グラデーションがサブビューの背後を飛び回るので、これにより、ユーザーが各ビューを切り替えたときのグラデーションのバグがより明確になりました。

興味深いことに、勾配の問題は、OS X 10.7 Snow Leopardへの移行後にのみ現れました。同じ変更されていない同じソースコードと.xib/.nibファイルは、以前のバージョンのOS Xではこの問題を引き起こしませんでした。この問題はレーダーレポートにふさわしい新しいバグかもしれないとのココアヒーローの提案と一致しているようです - おそらく、マウンテンライオンで修正されているのでしょうか?

私のアプリケーションのメインNSWindowといくつかのサポートウィンドウはすべて、「Textured」(メタリック)バックグラウンドオプションを使用するように設定されていましたが、Snow Leopardへの移行後にのみグラデーション「バグ」が現れました。

この記事を見つける前に、私が問題を '解決する'ために遭遇した唯一の方法は、ウィンドウに「サイズ変更」コントロールを有効にしてグラデーションのバグが消えたことに気付いたことでした。

-(void)setShowsResizeIndicator:(BOOL)showResizeIndicatorと制御「のサイズ変更」、および-(NSSize)windowWillResize:(NSWindow *)sender toSize:(NSSize)frameSizeへの呼び出しをインターセプトすることにより、ウィンドウのサイズを変更するために、ユーザによって試みを上書きしかし、私は私の特定のアプリケーションのウィンドウがサイズ変更可能であることを望んでいませんでした、と私はタイトルバーを無効にすることができな限り、これは明らかにエレガントな解決策ではありませんでした。このソリューションは特に、ウィンドウ内のサイズを変更しようとしたときにユーザーが混乱していたため、カーソルがサイズ変更されたマウスカーソル(まだ隠すことができなかったもの)を表示していたため、失敗しました。

ありがたいことに、 "Content Border"設定を "None"に変更すると、Interface Builder(Xcode 4.3.3と統合されたバージョン)で勾配の問題が直ちに消えましたが、少なくとも私の場合は、この変更を加えた後にアプリケーションをコンパイルして実行すると、.xibファイルがロードされるとすぐにアプリケーションがクラッシュしました。トレースに次のエラーメッセージが表示されました。 "setAutorecalculatesContentBorderThickness:forEdge:非テクスチャウィンドウ内でNSMaxYEdgeを使用して呼び出すことはできません"。

「コンテンツ境界」の設定を「カスタム」に設定し、「上部」と「下部」のコンテンツの境界線を「1」に設定すると、クラッシュが解決されましたが、「カスタム"私は実験で" Custom Border "設定を" None "に変更し、アプリケーションをコンパイルして2回目のコンパイルで正常に実行できることを発見しました。

しかし、「コンテンツの境界線」を「自動サイズ変更」以外に変更すると、XCodeで数十の「不正な構成:Mac OS X 10.7より前の自動レイアウト」エラーが発生しました。 :10.6 "以前のMac OS Xバージョンの上/下のコンテンツ境界のプロパティの自動サイズ変更以外の値は、すべて「コンテンツボーダー」プロパティに関連しています(私のデプロイメントターゲットは10.7ではなくOS X 10.6に設定されています)。このように、エラーに対する別の解決策の探索が再開されたので、以下に詳述する解決策に至りました。私が見つけた解決策は、少なくともOS X 10.7では、Textureウィンドウの "Content Border"をInterface Builderで "Autosize"に戻し、代わりにコード内のコンテンツ境界設定をオーバーライドすることでした(私の場合はこのコードを配置します)私のテクスチャウィンドウののNSWindowControllerクラス)のそれぞれに:

// windowDidLoad is called when the window has loaded but before it's displayed... 
-(void)windowDidLoad 
{ 
    // set the content border thickness to 0 for both the top and bottom window edges 
    [[super window] setContentBorderThickness:0 forEdge:NSMaxYEdge]; // top border 
    [[super window] setContentBorderThickness:0 forEdge:NSMinYEdge]; // bottom border 

    // disable the auto-recalculation of the window's content border 
    [[super window] setAutorecalculatesContentBorderThickness:NO forEdge:NSMaxYEdge]; 
    [[super window] setAutorecalculatesContentBorderThickness:NO forEdge:NSMinYEdge]; 
} 

あなたは、コードを介して、または他のNSWindowの上のインターフェイスビルダーのいずれかを介してそれを設定しようとする場合にのみ、テクスチャウィンドウの一番上のコンテンツの境界線の太さを設定できることに注意してくださいアプリケーションがクラッシュする可能性があります。

NSWindowの文書によると、「setContentBorderThickness:forEdge:forwardingを呼び出す非テクスチャウィンドウでは、NSMaxYEdgeを渡すと例外が発生します。テクスチャウィンドウの上端のコンテンツのボーダーの太さを設定することが有効です。

OS X 10.7の「テクスチャ化」ウィンドウのレンダリングでは、勾配の問題が実際に新しいバグであるように見えるため、コンテンツの境界線をオーバーライドするコードを修正して、 OS X 10.7を実行しているシステム(およびMountain Lionで問題が修正されていない場合は、今後のOS Xのリリース)

この投稿は役に立ちましたか?このバグは本当に混乱していて、私が解決したいと思っていたよりもはるかに長くかかりました。そのような問題の疎密な文書があるように、私は、他の時間を節約し、オンライン検索を通じて問題をより多くの露出とキーワードに与えることを期待して自分の発見を投稿する価値があると感じました。

私は他の多くの人がこの問題を解決するためにまだ苦労しているので、彼らの答えなしで、ココア・ヒーローに行く必要があります。

+0

Mountain Lion GMでこのバグが修正されたかどうかはわかりません。私はそれと戦わなければならない時を覚えています。 – Dimillian

+0

@ Dimillian77 - いいえ、マウンテンライオンにはまだありません。実際には、テクスチャ付きグラデーションのカラーリングが変更されたため、私のアプリケーションではより目立つようになりました。ありがたいことに、ここの答えが私の問題を解決しました。 –

関連する問題