IPhone CATransition добавляет угасание к началу и концу любой анимации?

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

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

В настоящее время я отлично работаю, но хочу добавить анимацию в изменение вида. Моя цель - простая анимация. Один вид выталкивается, когда новый вид вставляет.

Заглядывая в CAT-переходы и пытаясь это, у меня есть рабочая версия (в настоящее время для нажатия сверху/снизу)

        [thisView.view removeFromSuperview];
        [thisView release];
        thisView = [[MenuViewController alloc] initWithNibName:@"MenuView" bundle:nil];
        [self.view addSubview:thisView.view];   

        CATransition *animation = [CATransition animation];
        [animation setDuration:6.3];
        [animation setType:kCATransitionPush];
        [animation setSubtype:kCATransitionFromTop];
        [animation setRemovedOnCompletion:YES];
        [animation setTimingFunction:[CAMediaTimingFunction functionWithName:kCAMediaTimingFunctionLinear]];
        [[self.view layer] addAnimation:animation forKey:nil];

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

Как таковой - в этом примере; поскольку меню выдвигается снизу, оно будет очень медленно исчезать из белого цвета, и по мере того, как предыдущий вид покидает экран, он будет медленно исчезать до белого.

Обратите внимание, что продолжительность установлена ​​равной 6, так что замирание является драматическим.

Есть ли способ удалить затухание здесь, чтобы каждый вид оставался твердым на пути и выходом? Или я пропустил знак полностью на этом маршруте, который я принимаю?

Я ценю любую помощь. Извиняюсь, что я давно намотан.

Ответ 1

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

  • Измените цвет фона окна. Если оба представления, которые вы теряете, имеют одинаковый сплошной цвет фона, тогда это будет выглядеть довольно хорошо.

  • Не создавайте фон в каждом представлении (например, "MenuView" ), а скорее имеете общий фоновый вид, который всегда под этими представлениями.

Обратите внимание, что это не сработает при любых обстоятельствах - сгруппированные UITableView s, например, всегда полностью непрозрачны.

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

Вы также можете рассмотреть возможность поиска метода UIView setAnimationTransition:forView:cache:, если вы еще не являетесь другим способом перехода между представлениями (хотя он не может делать скользящую анимацию, если вы настроены на это).

Ответ 2

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

Ответ 3

Мне удалось получить представление для перехода без выцветания в начале и в конце, используя анимацию UIView. ПРИМЕЧАНИЕ. В приведенном ниже коде у меня есть UINavigationController и UITabBarController внутри основного UIView. Основной UIVIew (containerView) - это то, что я добавил как subView в окно приложения. Остальные два представляют собой subviews containerView.

UITabBarController *tabBarController = [(AppDelegate_iPhone *)[[UIApplication sharedApplication] delegate] tabBarController];
UIView *containerView = [(AppDelegate_iPhone *)[[UIApplication sharedApplication] delegate] containerView];
UINavigationController *accountsNavigationController = [(AppDelegate_iPhone *)[[UIApplication sharedApplication] delegate] accountsNavigationController];

CGRect accountsNavigationControllerEndFrame = containerView.frame;
CGRect tabBarControllerEndFrame = CGRectMake(containerView.frame.size.width, containerView.frame.origin.y, containerView.frame.size.width, containerView.frame.size.height);
[UIView beginAnimations:nil context:nil];
[UIView setAnimationDuration:0.4];
tabBarController.view.frame = tabBarControllerEndFrame;
accountsNavigationController.view.frame = accountsNavigationControllerEndFrame;
[UIView commitAnimations];