我在App Delegate中有这个方法,它创建了一个窗口和内容视图,但我希望能够在输入和退出视图时使用NSPoint跟踪鼠标.问题是我不想创建一个NSView Custom类,并希望在我的AppDelegate中完成所有操作.鼠标跟踪(在底部)不起作用,有什么建议吗?
- (void)toggleHelpdisplay { // Create helpWindow. NSRect mainFrame = [[NSScreen mainScreen] frame]; NSRect helpFrame = NSZeroRect; float width = 75; float height = 75; helpFrame.origin.x = (mainFrame.size.width - width) / 2.0; helpFrame.origin.y = 200.0; helpFrame.size.width = width; helpFrame.size.height = height; helpWindow = [[BrightnessView windowWithFrame:helpFrame] retain]; // Configure window. [helpWindow setReleasedWhenClosed:YES]; [helpWindow setHidesOnDeactivate:NO]; [helpWindow setCanHide:NO]; [helpWindow setCollectionBehavior:NSWindowCollectionBehaviorCanJoinAllSpaces]; [helpWindow setIgnoresMouseEvents:NO]; // Configure contentView. NSView *contentView = [helpWindow contentView]; [contentView setWantsLayer:YES]; CATextLayer *layer = [CATextLayer layer]; layer.opacity = 0; [contentView setLayer:layer]; CGColorRef bgColor = CGColorCreateGenericGray(0.0,0.6); layer.backgroundColor = bgColor; CGColorRelease(bgColor); layer.string = ? HELP_TEXT : HELP_TEXT_OFF; layer.contentsRect = CGRectMake(0,1,1.2); layer.fontSize = 40.0; layer.foregroundColor = CGColorGetConstantColor(kCGColorWhite); layer.borderColor = CGColorGetConstantColor(kCGColorWhite); layer.borderWidth = 4.0; layer.cornerRadius = 4.0; layer.alignmentMode = kCAAlignmentCenter; [window addChildWindow:helpWindow ordered:NSWindowAbove]; float helpOpacity = (([NSApp isActive] ? 1 : 0)); [[[helpWindow contentView] layer] setopacity:helpOpacity]; //track mouse so that once hovered make larger. NSPoint mouseLocation = [[self window] mouseLocationOutsideOfEventStream]; if (NSPointInRect(mouseLocation,helpFrame)) { NSLog(@"mouse over"); } else { NSLog(@"mouse not over"); } }
解决方法
您应该可以使用
NSTrackingArea执行此操作;你会做这样的事情(在浏览器中键入,未经测试):
self.helpView = contentView; // Need to store a reference to the view if you want to convert from its coordinate system // Set up a tracking area NSTrackingArea *trackingArea = [[[NSTrackingArea alloc] initWithRect:[self.helpView bounds] options:NSTrackingActiveInActiveApp | NSTrackingMouseEnteredAndExited | NSTrackingMouseMoved owner:self userInfo:nil] autorelease]; [self.helpView addTrackingArea:trackingArea]; - (void)mouseEntered:(NSEvent *)event; { NSPoint location = [self.helpView convertPoint:[event locationInWindow] fromView:nil]; // Do whatever you want to do in response to mouse entering } - (void)mouseExited:(NSEvent *)event; { NSPoint location = [self.helpView convertPoint:[event locationInWindow] fromView:nil]; // Do whatever you want to do in response to mouse exiting } - (void)mouseMoved:(NSEvent *)event; { NSPoint location = [self.helpView convertPoint:[event locationInWindow] fromView:nil]; // Do whatever you want to do in response to mouse movements }
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。