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 ответа

Решение

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

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

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

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

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

Вы также можете рассмотреть вопрос о 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];
Другие вопросы по тегам