gpt4 book ai didi

cocoa - 基于 View 的 NSOutlineView 中的 Finder 样式 float 组行

转载 作者:行者123 更新时间:2023-12-03 16:47:36 24 4
gpt4 key购买 nike

我在我的项目中实现了一个基于 View 的 NSOutlineView。我正在使用 float 组行。现在,我想让这个 NSOutlineView 看起来基本上像 Finder ListView (CMD-2),当它处于“排列方式”布局时(例如“按种类”:CTRL-CMD-2)。这意味着,最上面的组行应该显示列标题,并且一旦下一个较低的组行开始将前一个组行移出 View ,列标题就会在第二组行上淡入(我希望这使得感)。

是否有任何开箱即用的方法来实现这一目标?到目前为止,我已经成功地对 NSTableCellView 进行子类化以显示列的标题,但是,我无法使淡入工作,因为我似乎无法找出组行相对于其上方 float 行的位置。

问候,迈克尔

最佳答案

我找到了实现我想要的目标的可能方法。在我的自定义 NSTableCellView 的 drawRect: 方法中,当然可能以一种令人讨厌的方式来找出 View 相对于封闭的 NSClipView 的位置。相关代码:

- (void)drawRect:(NSRect)dirtyRect {
// _isGroupView is a member variable which has to be set previously
// (usually in setObjectValue:) in order for us to know if we're a
// group row or not.
if (_isGroupView) {

// This is the nasty party:
NSClipView *clipView = (NSClipView*)self.superview.superview.superview;
if (![clipView isKindOfClass:[NSClipView class]]) {
NSLog(@"Error: something is wrong with the scrollbar view hierarchy.");
return;
}

NSRect clipRect = [clipView documentVisibleRect];
CGFloat distanceToTop = self.superview.frame.origin.y - clipRect.origin.y;
if (self.superview.frame.origin.y - clipRect.origin.y < self.frame.size.height) {
// This means, that this NSTableCellView is currently pushing the
// view above it out of the frame.

CGFloat alpha = distanceToTop / self.frame.size.height;
NSColor *blendColor = [[NSColor blackColor] blendedColorWithFraction:alpha ofColor:[NSColor whiteColor]];

// ...
// do stuff with blendColor
// ...
// blendColor should now be the appropriate color for the wanted
// "fade in" effect.
//
}
}
}

我希望这是有道理的;-)。任何提示仍然值得赞赏!

干杯,迈克尔

关于cocoa - 基于 View 的 NSOutlineView 中的 Finder 样式 float 组行,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8720795/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com