Замена подпредставления NSSplitView основной анимацией - PullRequest
1 голос
/ 05 сентября 2011

Я пытаюсь выяснить, как анимировать переключение (замену) подпредставлений в вертикально настроенном NSSplitView с двумя представлениями.У меня есть полу-работа с использованием следующих методов в моем подклассе NSSplitView:

Чтобы настроить анимацию:

- (void)awakeFromNib {
    // set delegate
    [self setWantsLayer:YES];
    CATransition *transition = [CATransition animation];
    [transition setType:kCATransitionPush];
    [transition setSubtype:kCATransitionFromBottom];
    [transition setDuration:1.0];
    [self setAnimations:[NSDictionary dictionaryWithObject:transition
                                                    forKey:@"subviews"]];
}

И выполнить это:

- (void)replaceRightView:(NSView *)newView animated:(BOOL)animate {
    NSRect currentSize = [[[self subviews] objectAtIndex:1] frame];
    [newView setFrame:currentSize];

    if (animate) {
        [[self animator] replaceSubview:[[self subviews] objectAtIndex:1]
                                   with:newView];
    } else {
        [self replaceSubview:[[self subviews] objectAtIndex:1]
                        with:newView];
    }
}

Однако этот код имеет эффект отталкивания всего NSSplitView, а не только подпредставления с правой стороны разделения.

Есть ли способ анимировать только переход подпредставления?Возможно, я использую неправильный ключ анимации («подпредставления»)?Другие методы анимации тоже подойдут.

Спасибо!

1 Ответ

1 голос
/ 22 сентября 2011

Вероятно, это не самый чистый способ, но в итоге я использовал подкласс NSView «контейнер» с пользовательскими методами addSubview: и replaceSubview:withView:, которые изменяют фрейм нового подпредставления в соответствии с фреймом представления контейнера, который затем структурируется вNSSplitView subview, который я хотел оживить.Затем я настроил CATransition в представлении контейнера, и все заработало, как я хотел.

...