iPhone CATransition добавляет исчезновение в начало и конец любой анимации?
Так что я только недавно начал разрабатывать несколько простых приложений для iphone. Я скажу, что я вполне уверен, что у меня пока нет четкого понимания программирования для нескольких представлений, но я стараюсь учиться по ходу дела.
У меня есть программа, которая начиналась как приложение на основе простого окна, так что я мог написать все в надежде узнать больше о том, что я делаю. У меня есть единственный контроллер представления, который действует, чтобы загрузить и выпустить представления согласно запросу от каждого из других контроллеров представления. Элементы не сохраняются от одного представления к другому.
В настоящее время у меня это работает нормально, но я хотел добавить анимацию к изменению вида. Простая анимация толчка была моей целью. Один вид выдвигается, как новый вид выдвигается.
Смотря на CATransitions и пробуя это, у меня есть рабочая версия (в настоящее время для нажатия сверху / снизу)
[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, так что затухание является драматичным.
Есть ли способ убрать замирание, чтобы каждый вид оставался твердым на входе и выходе? Или я полностью пропустил марку на этом пути, по которому я иду?
Я ценю любую помощь. Извиняюсь, я давно обессилен.
3 ответа
Мне никогда не удавалось найти решение этой проблемы, но я могу предложить разумный обходной путь. То, что происходит, это то, что оно не становится белым, а становится прозрачным, а фон окна (или любой другой вид сзади) белый. Есть несколько способов обойти это:
Измените цвет фона окна. Если оба вида, между которыми вы переходите, имеют одинаковый сплошной цвет фона, то это будет выглядеть довольно хорошо.
Не визуализируйте фон в каждом представлении (например, "MenuView"), а используйте общий фоновый вид, который всегда находится под этими представлениями.
Обратите внимание, что это не будет работать при любых обстоятельствах - сгруппированы UITableView
s, например, всегда полностью непрозрачны.
(Как я отмечаю, я предполагаю, что вы не создаете приложение на основе навигации, и в этом случае вся анимация должна обрабатываться автоматически.)
Вы также можете рассмотреть вопрос о UIView
метод setAnimationTransition:forView:cache:
если у вас еще не было другого способа перехода между представлениями (хотя он не может выполнять скользящую анимацию, если вы настроены на это).
Я решил эту проблему, заключив представление, к которому применил эффект, в суперпредставление и установив свойство суперпредставления "подпредставления клипа". теперь исчезновение "обрезается" суперпредставлением.
Мне удалось получить переходы видов без затухания в начале и в конце с помощью анимации UIView. ПРИМЕЧАНИЕ. В приведенном ниже коде у меня есть UINavigationController и UITabBarController внутри основного UIView. Основной UIVIew (containerView) - это то, что я добавил как subView в окно приложения. Два других - это подпредставления контейнера.
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];