2011-01-09 31 views
9

我是Mac新手,我想在光标进入或退出主窗口时触发事件。我读了一些关于NSTrackingArea的内容,但我不明白该怎么做。如何使用NSTrackingArea

回答

13

Apple为NSTrackingAreas提供了文档和示例。

跟踪鼠标进入或存在窗口的最简单方法是在窗口的contentView中设置跟踪区域。然而,这将不跟踪窗口的工具栏

就像一个简单的例子,在自定义内容视图代码:

- (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方法和测试活动的跟踪区域,以确保这是正确的。

+1

好的,这将是一个noob问题,但我必须在哪里放置代码?我在哪里可以找到自定义视图的代码?在使用插座和动作时,我是否必须将对象连接到Interface Builder中的视图? – icant 2011-01-10 20:24:03

+3

此代码应放置在自定义UIView子类中。然后应该添加自定义UIView作为窗口的内容视图。使用Interface Builder,为窗口创建或选择一个内容视图,并使用Interface Builder检查器面板指定它的类作为您的自定义UIView的类。 – 2011-01-10 20:31:59

5

通过Matt Bierner真的帮助我;需要执行-viewWillMoveToWindow:方法。

我还想补充一点,你也将需要实现这一点,如果你要处理的跟踪区域视图时调整大小:

- (void)updateTrackingAreas 
{ 
    // remove out-of-date tracking areas and add recomputed ones.. 
} 
在自定义子类

,来处理视图的变化的几何形状;这将自动为你调用。