Как изменить Нажатие и анимации Pop в основанном на навигации приложении

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

Редактирование 2018

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

213
задан Jab 16 November 2018 в 07:39
поделиться

3 ответа

Мне неизвестно, как можно публично изменить анимацию перехода.

Если кнопка «назад» не нужна, вам следует использовать контроллеры модального представления , чтобы иметь возможность «нажать снизу» / «перевернуть» / «затухать» / (≥3,2 ) переходы "загиб страницы".


На стороне private метод -pushViewController: animated: вызывает недокументированный метод -pushViewController: transition: forceImmediate: , например, если вам нужен переход слева направо, вы можете использовать

[navCtrler pushViewController:ctrler transition:10 forceImmediate:NO];

Однако вы не можете изменить «всплывающий» переход таким образом.

0
ответ дан 23 November 2019 в 04:26
поделиться

Использование частных звонков - плохая идея, поскольку Apple больше не одобряет приложения, которые это делают. Возможно, вы могли бы попробовать следующее:

//Init Animation
[UIView beginAnimations:nil context:NULL];
[UIView setAnimationDuration: 0.50];


[UIView setAnimationTransition:UIViewAnimationTransitionCurlUp forView:self.navigationController.view cache:YES];

//Create ViewController
MyViewController *myVC = [[MyViewController alloc] initWith...];

[self.navigationController pushViewController:myVC animated:NO];
[myVC release];

//Start Animation
[UIView commitAnimations];
10
ответ дан 23 November 2019 в 04:26
поделиться

Я нашел умеренно рекурсивный способ сделать это, который подходит для моих целей. У меня есть переменная экземпляра BOOL, которую я использую, чтобы заблокировать обычную всплывающую анимацию и заменить свое собственное неанимированное всплывающее сообщение. Изначально для переменной установлено значение NO. При нажатии кнопки «Назад» метод делегата устанавливает для нее значение «YES» и отправляет новое неанимированное всплывающее сообщение на панель навигации, тем самым снова вызывая тот же метод делегата, на этот раз с переменной, установленной в «YES». Если для переменной установлено значение YES, метод делегата устанавливает для нее значение NO и возвращает YES, чтобы разрешить появление неанимированного всплывающего сообщения. После возврата из второго вызова делегата мы вернемся к первому, где возвращается NO, что блокирует исходный анимированный поп! На самом деле это не так беспорядочно, как кажется. Мой метод shouldPopItem выглядит так:

- (BOOL)navigationBar:(UINavigationBar *)navigationBar shouldPopItem:(UINavigationItem *)item 
{
    if ([[navigationBar items] indexOfObject:item] == 1) 
    {
        [expandedStack restack];    
    }

    if (!progPop) 
    {
        progPop = YES;
        [navBar popNavigationItemAnimated:NO];
        return NO;
    }
    else 
    {
        progPop = NO;
        return YES;
    }
}

У меня работает.

-1
ответ дан 23 November 2019 в 04:26
поделиться
Другие вопросы по тегам:

Похожие вопросы: