2009-07-23 4 views
3

私はCocoaでは、円形ビュー上にカーソルを置いたときにカーソルを変更する最良の方法は何ですか?

をしたい私は、円形のカスタムNSViewのサブクラスを持っている、と私はマウスがビューの円形部分の上にマウスカーソルの外観を変更したいのですが、いない部分の上円の外側にあるビューの四角形の

Here's an illustration。私は画像タグでそれをインライン化していただろうが、私はあまりにも素晴らしい機能に参加するには新しいです。私が知っている何

は、これまで

私はNSCursorによるカーソルの外観を変更する方法を知っています。私は、長方形のビューでこれを達成する最善の方法は、カーソルの四角形を使用することだと思います。私はmouseMovedイベントを受け取ることができることを知っています(mouseEnteredとmouseExitedを使用して、マウスがこのビューを超えていないときにマウスをオフにしてください)、ポイントが関心領域にあるかどうかを判断する簡単で安価な方法があります。

それで問題は何ですか?

私が知る限り、システムはmouseMovedイベントを最初のレスポンダではないビューに送信しません。したがって、マウスが私のビュー上にマウスを置いたときにmouseMovedイベントを取得したい場合は、firstResponderのステータスを現在持っている人から盗む必要があります。テキストビューにフォーカスがある場合、マウスをそのようなビューの上に移動するだけで、それを奪うことができます。これは、使いやすさの観点からは受け入れられません。

したがって、私の質問は次のようになっています。これを行うには良い方法がありますか?最初のレスポンダーではなくmouseMovedイベントを取得できますか?

ありがとうございます!

私は以下のタグを追加しました:custom-views mouse-events NSCursor firstResponder もう一度、私はSAのnoobだからできません。

答えて

2

NSViewのacceptsFirstResponderメソッドをオーバーライドしてYESを返すだけでよいと思うかもしれません。そうしないと、ビューはイベント情報を受け取りません。

+0

実際そうです。ありがとう! –

1

円形の領域でなければなりませんか?ビューの四角形の範囲内の任意の場所に問題がなければ、cursor rectを使用できます。

+0

悲しいことに、この地域の円形の性質は交渉可能ではありません。幸いなことに、mouseMovedイベントを使用してヒット検出を実行します(mouseEnteredメソッドとmouseExitedメソッドで必要がない場合はオフにします)。 –

関連する問題