Эффект затухания вверху и внизу NSTableView / NSOutlineView - PullRequest
5 голосов
/ 22 декабря 2011

Я ищу способ нарисовать эффект затухания в табличном представлении (и в виде структуры, но я думаю, что это будет то же самое), когда содержимое прокручивается. Вот пример из приложения Fantastical :

fade effect on top

Также видео с похожим исчезновением на окнах QuickLook здесь .


Чтобы сделать это, я попытался создать подкласс прокрутки вида таблицы с помощью этого кода:

#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];
}

... но это ничего не выцветало, возможно потому, что оно вызывается до того, как будет нарисован фактический табличный вид. Я понятия не имею, как это сделать: (

Кстати, и табличный вид, и контурный вид, который я хочу использовать для этого эффекта, основаны на представлении, и приложение имеет только 10.7.

1 Ответ

7 голосов
/ 24 декабря 2011

В Mac OS X (поскольку ваш вопрос помечен) есть несколько ошибок, которые затрудняют это.Это особенно актуально для Lion с упругой прокруткой.

Я (только сегодня) собрал то, что я считаю более подходящим, чем непосредственная работа с табличными или контурными представлениями: пользовательский подкласс NSScrollView, который сохраняет два "Исчезающие виды "выложены плиткой в ​​правильном месте над своим видом клипа. JLNFadingScrollView может быть настроен с желаемой высотой и цветом замирания и является бесплатным / открытым исходным кодом на Github.Пожалуйста, уважайте лицензию и наслаждайтесь.: -)

Examples of JLNFadingScrollView

...