【发布时间】:2012-03-09 19:12:37
【问题描述】:
我正在开发一个具有自定义视图的应用程序,用户可以在该视图中移动对象。他们可以捡起它们并将它们放在不同的位置,我想根据他们可以拾取的对象以及可以将它们放置的位置来更改光标。
我正在使用tracking areas,但为了保持正确的光标,我正在使用跟踪区域通知并将光标设置为任何鼠标移动。
这很好用,我有我的解决方案,但我想知道经常调用[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]);
【问题讨论】:
标签: macos cocoa nsview nscursor