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