检查NSView在其NSWindow中是否可见

问题描述 投票:0回答:1

我怎么知道我的NSViewNSWindow中是否可见?

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

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

对重叠视图进行核算将是“很好”,但不是必需的。

macos cocoa nsview nswindow appkit
1个回答
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

注意:不考虑重叠视图。

© www.soinside.com 2019 - 2024. All rights reserved.