ユーザーがビュー内でオブジェクトを移動できるカスタム ビューを使用してアプリケーションを開発しています。彼らはそれらを拾って別の場所に置くことができます。拾うことができるオブジェクトと置くことができる場所に応じて、カーソルを変更したいと思います。
トラッキング エリアを使用していますが、正しいカーソルを維持するために、トラッキング エリア通知を使用し、マウスの動きに合わせてカーソルを設定しています。
これはうまく機能しており、解決策はありますが、[NSCursor set]
頻繁に呼び出すことでパフォーマンスが低下するかどうか、またはAppKit
問題なくこれを処理できるかどうかを知りたいですか?
更新: Rob Kenigerのアドバイスに従って、アプリケーションのプロファイリングを行ったところ、カーソルの変更に費やされた実際の時間はわかりませんでした。安全のために、ここで定義されているように、現在のカーソルの状態を保持し、必要な場合にのみ設定する単純なマクロを実装しました。
// Values for _currentCursor
#define CURRENT_CURSOR_UNKNOWN 0
#define CURRENT_CURSOR_ARROW 1
#define CURRENT_CURSOR_POINTINGHAND 2
#define CURRENT_CURSOR_OPENHAND 3
#define CURRENT_CURSOR_CLOSEDHAND 4
#define CURRENT_CURSOR_NOENTRY 5
#define CURRENT_CURSOR_HIDDEN 0x80
#define SET_CURSOR(current, cursor) \
if ((_currentCursor & CURRENT_CURSOR_HIDDEN) == 0 && _currentCursor != current) \
{ \
[cursor set]; \
_currentCursor = current; \
}
これをコードで呼び出すと、次のようになります。
SET_CURSOR(CURRENT_CURSOR_CLOSEDHAND, [NSCursor closedHandCursor]);