【问题标题】:Check if a NSView is visible in its NSWindow检查 NSView 在其 NSWindow 中是否可见
【发布时间】:2019-02-22 20:08:45
【问题描述】:

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

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

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

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

【问题讨论】:

    标签: macos cocoa nsview nswindow appkit


    【解决方案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
    

    注意:不考虑重叠视图。

    【讨论】:

    • +1 但不需要与窗口边界相交。 contentView 是一个祖先,所以它已经被 visibleRect 检查过。
    • @KenThomases 真!
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2015-05-26
    • 2013-11-09
    • 2022-01-07
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多