何时覆盖updateTrackingAreas

时间:2012-07-07 10:44:07

标签: objective-c cocoa nsscrollview nstrackingarea

所以我有一个非常大的NSScrollView,里面有几个自定义视图。在这些自定义视图中,我会覆盖-(void)updateTrackingAreas,如下所示:

- (void)updateTrackingAreas
{    
    [self removeTrackingArea:trackingArea];

    trackingArea = [[NSTrackingArea alloc] initWithRect:[self bounds]
                                                options:(NSTrackingCursorUpdate |
                                                         NSTrackingActiveWhenFirstResponder |
                                                         NSTrackingInVisibleRect)
                                                  owner:self 
                                               userInfo:nil];

    [self addTrackingArea:trackingArea];
}

但不知怎的,我觉得这有点不高效,因为我在NSScrollView中有大约50个自定义视图实例,并且一次只能看到其中5个实例,这样我就更新了不可见的跟踪区域视图。

所以我想如果视图不在NSScrollView的可见rect中,我会跳过更新跟踪区域。类似的东西:

- (void)updateTrackingAreas
{
    if(!NSIntersectsRect([self frame], [[self superview] visibleRect]))
    {
        return;
    }

    // ...
} 

这似乎运作良好,但我不确定这是否安全。

有没有人对此事有任何建议?

0 个答案:

没有答案