检查NSView在其NSWindow中是否可见

时间:2019-02-22 20:08:45

标签: macos cocoa nsview nswindow appkit

如何知道我的NSView是否在其NSWindow中可见?

它需要考虑滚动超级视图。

不需要不需要知道NSWindow是否对用户可见。

考虑重叠视图将是“很高兴”,但不是必需的。

1 个答案:

答案 0 :(得分:1)

这应该做到。

@interface NSView (Visibility)
- (BOOL)visibleInWindow;
@end

@implementation NSView (Visibility)

- (BOOL)visibleInWindow
{
  if (self.window == nil) {
    return NO;
  }

  // Might have zero opacity.
  if (self.alphaValue == 0 || self.hiddenOrHasHiddenAncestor) {
    return NO;
  }

  // Might be clipped by an ancestor.
  return !NSIsEmptyRect(self.visibleRect);
}

@end

注意:未考虑重叠视图。