在NSTableView/NSOutlineView的顶部和底部淡化效果

Ale*_*lex 5 cocoa objective-c fade nstableview nsscrollview

我正在寻找一种方法来在滚动内容时在桌面视图(和大纲视图,但我认为它将是相同的)上绘制淡入淡出效果.以下是Fantastical应用程序的示例:

淡化效果在上面

此处还有QuickLook窗口上类似淡入淡出的视频.


为此,我尝试使用以下代码子类化tableview的scrollview:

#define kFadeEffectHeight 15

@implementation FadingScrollView

- (void)drawRect: (NSRect)dirtyRect
{
    [super drawRect: dirtyRect];

    NSGradient* g = [[NSGradient alloc] initWithStartingColor: [NSColor blackColor] endingColor: [NSColor clearColor]];

    NSRect topRect = self.bounds;
    topRect.origin.y = self.bounds.size.height - kFadeEffectHeight;
    topRect.size.height = kFadeEffectHeight;

    NSRect botRect = self.bounds;
    botRect.size.height = kFadeEffectHeight;

    [NSGraphicsContext saveGraphicsState];
    [[NSGraphicsContext currentContext] setCompositingOperation: NSCompositeDestinationAtop];
    // Tried every compositing operation and none worked. Please specify wich one I should use if you do it this way

    [g drawInRect: topRect angle: 90];
    [g drawInRect: botRect angle: 270];

    [NSGraphicsContext restoreGraphicsState];
}
Run Code Online (Sandbox Code Playgroud)

...但这并没有消失任何东西,可能是因为在绘制实际的表格视图之前调用了它.我不知道如何做到这一点:(

顺便说一句,我想要具有此效果的tableview和outlineview都是基于视图的,并且app仅为10.7.

Jos*_*zzi 7

在Mac OS X中(因为您的问题被标记),有几个陷阱使这很困难.在具有弹性滚动的Lion上尤其如此.

我(就在今天)把我认为更好的方法放在一起比在桌子上工作或直接概述视图:一个自定义的NSScrollView子类,它将两个"淡入淡出视图"平铺在其剪辑视图顶部的正确位置.JLNFadingScrollView可以配置所需的淡入淡出高度和颜色,并且是Github上的自由/开源.请尊重许可并享受.:-)

JLNFadingScrollView的示例