我正在开发一个具有自定义视图的应用程序,用户可以在其中移动视图周围的对象。他们可以捡起它们并将它们放在不同的地方,我想根据他们可以拾取的对象以及可以将它们放置的位置来改变光标。
我正在使用跟踪区域,但为了保持正确的光标,我正在使用跟踪区域通知并将光标设置为任何鼠标移动。
这运作良好,我有我的解决方案,但我想知道[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]);