Cocoa 如何使用NSTrackingArea
我是Mac编程新手,我想在光标进入或退出主窗口时触发事件。我读了一些关于NSTrackingArea的文章,但我不知道该怎么做。苹果公司提供了相关文档和示例 跟踪鼠标何时进入或退出窗口的最简单方法是在窗口的contentView中设置跟踪区域。但是,这不会跟踪窗口的工具栏 举个简单的例子,在自定义内容视图的代码中:Cocoa 如何使用NSTrackingArea,cocoa,macos,Cocoa,Macos,我是Mac编程新手,我想在光标进入或退出主窗口时触发事件。我读了一些关于NSTrackingArea的文章,但我不知道该怎么做。苹果公司提供了相关文档和示例 跟踪鼠标何时进入或退出窗口的最简单方法是在窗口的contentView中设置跟踪区域。但是,这不会跟踪窗口的工具栏 举个简单的例子,在自定义内容视图的代码中: - (void) viewWillMoveToWindow:(NSWindow *)newWindow { // Setup a new tracking area when
- (void) viewWillMoveToWindow:(NSWindow *)newWindow {
// Setup a new tracking area when the view is added to the window.
NSTrackingArea* trackingArea = [[NSTrackingArea alloc] initWithRect:[self bounds] options: (NSTrackingMouseEnteredAndExited | NSTrackingActiveAlways) owner:self userInfo:nil];
[self addTrackingArea:trackingArea];
}
- (void) mouseEntered:(NSEvent*)theEvent {
// Mouse entered tracking area.
}
- (void) mouseExited:(NSEvent*)theEvent {
// Mouse exited tracking area.
}
您还应该实现NSView的updateTrackingAreas方法,并测试事件的跟踪区域,以确保它是正确的;需要实现-viewWillMoveToWindow:
方法
我还想补充一点,如果要在调整视图大小时处理跟踪区域,您还需要实现此功能:
- (void)updateTrackingAreas
{
// remove out-of-date tracking areas and add recomputed ones..
}
在自定义子类中,处理视图的更改几何图形;这将自动为您调用。好的,这将是一个noob问题,但我必须将代码放在哪里?在哪里可以找到自定义视图的代码?我是否必须像使用Outlet和actions时那样将对象连接到Interface Builder中的视图?此代码应放在自定义UIView子类中。然后,应将自定义UIView添加为窗口的内容视图。使用Interface Builder,为窗口创建或选择一个内容视图,并使用Interface Builder inspector面板指定其类作为自定义UIView的类。非常确定您需要在上面的-viewWillMoveToWindow:方法末尾使用[trackingArea release]。使用
initWithRect:[self frame]
对我不起作用,但是,initWithRect:[self-bounds]
做到了。正如@x3ro提到的,initWithRect:self.bounds是正确的,请参阅文档。rect不能超过视图的边界,并且相对于视图的坐标空间,因此边界是正确的,而不是框架。是否要修复@MattBierner?如果不希望在调整视图大小后重新计算跟踪区域,请在创建NSTrackingVisibleRect区域时使用NSTrackingVisibleRect选项。@标记您的注释是本页最重要的注释之一!