Objective c 为什么不尊重跟踪区域

Objective c 为什么不尊重跟踪区域,objective-c,cocoa,Objective C,Cocoa,我一直在尝试跟踪区域,但遇到了一些问题,所以我创建了这个简单的程序作为测试。我在视图的左下角(即窗口的内容视图)创建了一个跟踪区域,但无论在何处进入或退出视图,我都会收到mouseEntered和退出消息。我还尝试将此代码放在init方法中,并awakeFromNib得到相同的结果 @implementation Parent //This view is the contentView of the main window -(void)viewDidMoveToWindow{ NS

我一直在尝试跟踪区域,但遇到了一些问题,所以我创建了这个简单的程序作为测试。我在视图的左下角(即窗口的内容视图)创建了一个跟踪区域,但无论在何处进入或退出视图,我都会收到
mouseEntered
和退出消息。我还尝试将此代码放在init方法中,并
awakeFromNib
得到相同的结果

@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

这与您正在使用的选项有关,请尝试使用

options:NSTrackingActiveAlways | NSTrackingMouseEnteredAndExited

那么,为什么NSTrackingVisibleRect不能像我预期的那样工作呢?我认为该选择的目的是只允许在跟踪区域中指定的rect的可见部分进行跟踪——似乎是在添加跟踪矩形的整个视图中。好的,我现在明白了——我重新读取了文档,它说使用NSTrackingVisibleRect选项,rect返回的值被忽略,并且rect会随着可见rect中的更改而自动更新。在这种情况下,您似乎可以使用NSTrackingVisibleRect,但根据文档,从rect返回的值会被忽略。我从搜索中发现这个答案非常相似,那么为什么NSTrackingVisibleRect不能像我预期的那样工作呢?我认为该选择的目的是只允许在跟踪区域中指定的rect的可见部分进行跟踪——似乎是在添加跟踪矩形的整个视图中。好的,我现在明白了——我重新读取了文档,它说使用NSTrackingVisibleRect选项,rect返回的值被忽略,并且rect会随着可见rect中的更改而自动更新。在这种情况下,您似乎可以使用NSTrackingVisibleRect,但根据文档,从rect返回的值会被忽略。我从搜索中发现这个答案非常相似