Базовая анимация с NSView и подпредставлениями - PullRequest
4 голосов
/ 06 мая 2010

Я создал подкласс NSView, чтобы создать представление контейнера (которое я назвал TRTransitionView), которое используется для размещения двух подпредставлений. Одним нажатием кнопки я хочу перевести одно подпредставление из родительского представления, а другое - с использованием типа перехода Core Animation: kCATransitionPush. По большей части у меня все работает так, как вы и ожидали ( вот базовый тестовый проект, который я создал вместе ).

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

Вторая проблема связана с NSTableView, который я поместил в свое первое подпредставление. Когда размер моего окна изменяется, и мой TRTransitionView изменяет размеры, чтобы соответствовать его новым измерениям, мой TableView, кажется, изменяет свой контент довольно неловко (кажется, что вся таблица колеблется вокруг), и недавно расширенное пространство, которое занимает таблица, кажется, «мигает» как будто в процессе анимации). Крайне сложно описать, но есть ли способ остановить это?

Вот мой класс TRTransitionView:

-(void) awakeFromNib
{
    [self setWantsLayer:YES];
    [self addSubview:[self currentView]];

    transition = [CATransition animation];
    [transition setType:kCATransitionPush];
    [transition setSubtype:kCATransitionFromLeft];

    [self setAnimations: [NSDictionary dictionaryWithObject:transition forKey:@"subviews"]];
}
- (void)setCurrentView:(NSView*)newView
{
    if (!currentView) {
        currentView = newView;
        return;
    }
    [[self animator] replaceSubview:currentView with:newView];

    currentView = newView;
}

-(IBAction) switchToViewOne:(id)sender
{
    [transition setSubtype:kCATransitionFromLeft];
    [self setCurrentView:viewOne];
}
-(IBAction) switchToViewTwo:(id)sender
{
    [transition setSubtype:kCATransitionFromRight];
    [self setCurrentView:viewTwo];
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...