为什么跟踪区域不被尊重
问题描述:
我一直在试验跟踪区域,并有一些问题,所以我创建了这个简单的程序作为测试。我在视图的左下角创建了一个跟踪区域(这是窗口的内容视图),但无论我进入还是离开视图,我都会收到mouseEntered
并退出消息。我也试着将这段代码放在init方法中,并且结果相同。为什么跟踪区域不被尊重
@implementation Parent //This view is the contentView of the main window
-(void)viewDidMoveToWindow{
NSLog(@"In viwDidMoveToWindow");
NSTrackingArea *area = [[NSTrackingArea alloc]initWithRect:NSMakeRect(0,0,50,50) options:NSTrackingInVisibleRect |NSTrackingMouseEnteredAndExited |NSTrackingActiveInActiveApp owner:self userInfo:nil];
[self addTrackingArea:area];
}
-(void)mouseEntered:(NSEvent *)theEvent {
NSLog(@"Entered");
}
-(void)mouseExited:(NSEvent *)theEvent {
NSLog(@"Exited");
}
@end
为什么跟踪区域不被遵守?
答
就好像你正在使用,尽量不使用
options:NSTrackingActiveAlways | NSTrackingMouseEnteredAndExited
那么,为什么如我所料不NSTrackingInVisibleRect不行的选项呢?我认为这个选择的目的是只允许在追踪区域中指定的矩形的可见部分进行追踪 - 似乎在整个视图中追踪矩形被添加到了追踪矩形中。 – rdelmar 2012-04-04 04:16:33
好吧,我现在明白了 - 我重新阅读了文档,并且使用NSTrackingInVisibleRect选项说,rect返回的值被忽略,并且rect会自动更新可见矩形中的更改。 – rdelmar 2012-04-04 04:32:45
在这种情况下,您似乎可以使用NSTrackingInVisibleRect,但根据文档,从rect返回的值将被忽略。我发现这个答案从搜索是非常相似的[链接](http://stackoverflow.com/questions/4136696/nstrackingarea-works-weird-entire-view-or-nothing-no-rectangles-respected) – 2012-04-04 04:45:49