今日扩展中的NSTrackingArea不提供事件

时间:2014-11-21 06:20:09

标签: macos nstrackingarea today-extension

我正在开发一款适用于Mac的Today Extension,它可以控制iTunes。它的工作和一切,但我的UI包括一个方形封面艺术图像,覆盖效果视图,其中包含元数据和控件:

derp

现在,很明显,如果我能以某种方式让它们出现在我需要的时候 - 当鼠标光标位于我的扩展视图之上时,那就太好了。

由于我之前已经处理过这类事情,所以我决定将一个NSView子类放在一起,使用NSTrackingArea在鼠标进入或存在其边界时触发通知:

/**
 * Sets up the tracking area, for the entire bounds of the view.
 */
- (void) setUpTrackingRect {
    _trackingArea = [[NSTrackingArea alloc] initWithRect:self.bounds
                                                 options:NSTrackingMouseEnteredAndExited | NSTrackingActiveAlways | NSTrackingInVisibleRect
                                                   owner:self
                                                userInfo:nil];

    [self addTrackingArea:_trackingArea];
}

/**
 * Mouse entry: send TSMouseTrackingViewMouseEntered notification.
 */
- (void) mouseEntered:(NSEvent *) theEvent {
    NSLog(@"Mouse Enter");
    [[NSNotificationCenter defaultCenter] postNotificationName:TSMouseTrackingViewMouseEntered
                                                        object:self];
}

/**
 * Mouse exit: send TSMouseTrackingViewMouseLeft notification.
 */
- (void) mouseExited:(NSEvent *) theEvent {
    NSLog(@"Mouse Exit");
    [[NSNotificationCenter defaultCenter] postNotificationName:TSMouseTrackingViewMouseLeft
                                                        object:self];
}

(摘自我的完整代码on GitHub.

那些NSLog用于帮助我进行调试:它们永远不会触发,尽管我的光标移入和移出视图没有问题。

我一直在查看Apple的文档,我找不到任何明确禁止此类内容的内容,或者解释为什么它不起作用。它是NSView中的标准NSViewController子类,但显示在通知中心,而不是独立应用。

对于为什么这个简单的跟踪区域视图在今天扩展中不起作用的任何建议都表示赞赏。

0 个答案:

没有答案