我对 NSView 进行了子类化,并使用以下内容创建了一个 NSTrackingArea:
-(void)setUpTrackingArea
{
if(trackingArea != nil)
{
[self removeTrackingArea:trackingArea];
}
int opts = (NSTrackingMouseEnteredAndExited | NSTrackingActiveAlways | NSTrackingEnabledDuringMouseDrag);
trackingArea = [ [NSTrackingArea alloc] initWithRect:[self bounds] options:opts owner:self userInfo:nil];
[self addTrackingArea:trackingArea];
NSLog(@"update tracking area %@", trackingArea);
NSPoint mouseLocation = [[self window] mouseLocationOutsideOfEventStream];
mouseLocation = [self convertPoint: mouseLocation fromView: nil];
if (NSPointInRect(mouseLocation, [self bounds]))
{
[self mouseEntered: nil];
}
else
{
[self mouseExited: nil];
}
}
我也压倒一切:
- (void)mouseEntered:(NSEvent *)theEvent
- (void)mouseExited:(NSEvent *)theEvent
设置一个突出显示属性,然后调用
[self setNeedsDisplay:YES];
它调用 drawrect 以突出显示菜单视图,就像您期望的菜单一样。
问题是鼠标退出事件似乎并不总是触发,在鼠标移开后突出显示一些自定义视图。
任何想法我做错了什么?
我创建了一个演示项目来提出这个问题。
见https://github.com/antokne/APGCustomMenuItemView
谢谢。