iPhone CATransition добавляет исчезновение в начало и конец любой анимации? - PullRequest
10 голосов
/ 04 марта 2010

Так что я только недавно начал разрабатывать несколько простых приложений для 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 ]

4 голосов
/ 04 марта 2010

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

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

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

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

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

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

2 голосов
/ 02 мая 2012

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

0 голосов
/ 23 июня 2010

Мне удалось заставить переходы переходов без затухания в начале и в конце с помощью анимации UIView.ПРИМЕЧАНИЕ. В приведенном ниже коде у меня есть UINavigationController и UITabBarController внутри основного UIView.Основной UIVIew (containerView) - это то, что я добавил как subView в окно приложения.Два других являются подпредставлениями 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];
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...