【发布时间】:2019-02-22 20:08:45
【问题描述】:
我如何知道我的NSView 在其NSWindow 中是否可见?
它需要考虑滚动超级视图。
它确实不需要知道NSWindow是否对用户可见。
考虑重叠视图将是“很高兴”但不是必需的。
【问题讨论】:
标签: macos cocoa nsview nswindow appkit
我如何知道我的NSView 在其NSWindow 中是否可见?
它需要考虑滚动超级视图。
它确实不需要知道NSWindow是否对用户可见。
考虑重叠视图将是“很高兴”但不是必需的。
【问题讨论】:
标签: macos cocoa nsview nswindow appkit
应该这样做。
@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
注意:不考虑重叠视图。
【讨论】:
contentView 是一个祖先,所以它已经被 visibleRect 检查过。