2009-06-26 5 views
2

フィールドの間違ったデータのインジケータとしてフォーカスリングアニメーションを使用したいと思います。だから私はフィールドにfirstFirstResponder:を送信し、フォーカスリングを赤からデフォルトの色にフェードインしたい。Cocoaフォーカスリングカラーアニメーション

私はCore Animationと対戦していますが、これを行う方法はまだありません。出来ますか?

+0

で利用可能ですか! – willc2

答えて

3

この戦略がHIGに続くかどうかはわかりませんが、フィールドがフィールドの隣で検証されないことを示す永続的なアイコンを表示するようなことがよくありますが、あなたが求めている効果。

コアアニメーションを使用する代わりに、単純なNSAnimationを使用する方が簡単な場合があります。フォーカスリングを描画するための 標準コードは、一般的に次のような何かを行く:

[NSGraphicsContext saveGraphicsState]; 
NSSetFocusRingStyle(NSFocusRingOnly); 
[[NSColor clearColor] set]; 
[[NSBezierPath bezierPathWithRect:focusRect] fill]; 
[NSGraphicsContext restoreGraphicsState]; 

このコードはのdrawRectで実装されます:あなたのコントロールのカスタムサブクラスのメソッド。

カスタムのフォーカスリングを描画するには、自分で描画する必要があります。また、NSSetFocusRingStyle関数を使用することもできません。色はNSAnimationから取り除かれ、コントロール自体が再描画されるように設定されます。フォーカスリングを描画するためにCocoaの機能を使用していないため、リングの描画領域を確保するために、おそらくビューの内容をインセットする必要があります。

NSAnimationsに関する詳しい情報は、フォーカスリングの例へのリンクを持っていますかAnimation Programming Guide for Cocoa

+0

ありがとうジョーイ。あなたが言ったように、私が望むことをする唯一の方法は、サブクラス化して手作業で描くことです。私はいくつかの不動産アニメーションでそれを行うことができると思ったが、それでも運がない。 – Anton

+0

Hmm。このコードは、フォーカスリングではなくコントロール内に塗りつぶした矩形を描画します。フォーカスリングは常にこの矩形の上に描画され、色は変わりません。 – Anton

+0

私はこれを私の元の答えで少し簡略化したかもしれません。 drawRect:メソッドとNSAnimationでカスタム描画を実装することをお勧めしますが、NSSetFocusRingStyle()を使用すると、通常の外観のフォーカスリングを描画する場合にのみ便利です。 Cocoaのフォーカスリングのスタイルをシミュレートするには、もっと多くの作業を行う必要があります。実際には、ビューの境界線を描画します。おそらくフォーカスリングを描くために必要なマージンだけ残りのコンテンツを挿入することができます。私は現実を少し反映するために上記の私の答えを編集しました。 –