代码之家  ›  专栏  ›  技术社区  ›  JasonGenX

NSTrackingArea的工作方式很奇怪-整个视图,或者什么都没有…没有矩形受到尊重

  •  1
  • JasonGenX  · 技术社区  · 14 年前


    我的问题有两方面:

    1. 如果没有nstrackingVisibleRect,则根本不会调用事件。
    2. 不管我用什么“ReCt”,一个覆盖整个视图的框架或一个只占据其中一小部分的帧——鼠标输入/退出事件被调用整个视图,而不管鼠标光标在视图上的位置。

    这就是我初始化跟踪区域的方法:

    trackingArea = [[NSTrackingArea alloc] initWithRect:rect
      options: (NSTrackingMouseEnteredAndExited | NSTrackingInVisibleRect | NSTrackingActiveAlways )
      owner:self userInfo:nil];
    [self addTrackingArea:trackingArea];
    

    2 回复  |  直到 14 年前
        1
  •  5
  •   Thomas Zoechling    13 年前

    迈克·阿卜杜拉的回答解释了第二点。


    rect 您提供的不在视图的坐标系内。您可以使用以下代码作为NSView子类的指定初始值设定项来接收 mouseEntered: mouseExited: 整个区域的事件:

    - (id)initWithFrame:(NSRect)frame 
    {
        if ((self = [super initWithFrame:frame])) 
        {
            //by using [self bounds] we get our internal origin (0, 0)
            NSTrackingArea* trackingArea = [[NSTrackingArea alloc] initWithRect:[self bounds] options:(NSTrackingMouseEnteredAndExited | NSTrackingActiveAlways) owner:self userInfo:nil];
            [self addTrackingArea:trackingArea];
            [trackingArea release];
        }
        return self;
    }
    

    documentation 说:

    创建跟踪区域对象时, 指定一个矩形(在视图中 坐标系)。。。

        2
  •  3
  •   Mike Abdullah    14 年前

    直接从文件 NSTrackingInVisibleRect

    这个 NSTrackingArea visibleRect )返回的值 rect