Я не могу найти это нигде. Так что, если у вас есть информация об этом, пожалуйста, дайте мне ссылку.
У меня один контроллер просмотра, я сделал меню для простой игры. На нем есть какие-то кнопки. У меня есть еще один контроллер представления и там тоже несколько кнопок.
Возникает вопрос: «Как я могу сделать анимацию этих кнопок (скрываясь за экраном) после того, как я выберу одну кнопку, которая запускает настраиваемый переход (без какой-либо анимации) к другому контроллеру представления, который будет запускать анимацию кнопки (приходя к экран от границы экрана)?"
Я сделал это так:
1) Теория: я делаю IBAction для кнопки меню, затем в этом IBAction я вызываю метод анимации, который вызывает метод executeSegueMethod:. После этого в новом ВК в методе viewWillAppear вызовите метод анимации (тот самый метод, что и в исходном ВК). Все это работает, но это не выглядит гладко. Проблема с этой анимацией возникает, когда конечный виртуальный канал заменяет исходный виртуальный канал. Есть какая-то доля секунды, когда все выглядит статично, и только после этого начинается анимация. Я не знаю, как убрать задержку VC для этого пункта назначения. Может быть, я должен загрузить представление назначения перед переходом? Я пытался это сделать, но может быть что-то сделал не так, или это просто мне не помогает.
2) Практика:
первыйViewController.m:
- (IBAction)newGameSegueButton {
[self menuSlideInDirection:@"CenterToLeft" performingSegueWithIdentifier:@"mode"];
}
-(void)menuSlideInDirection:(NSString *)direction performingSegueWithIdentifier:(NSString *)segueIdentifier
{
[UIView animateWithDuration:0.4 animations:^{
CGPoint newGameButtonCenter;
newGameButtonCenter.x = directionIndex * 160;
newGameButtonCenter.y = self.gameButtonSlide.center.y;
self.gameButtonSlide.center = newGameButtonCenter;
[UIView animateWithDuration:0.3 delay:0.1 options:UIViewAnimationOptionBeginFromCurrentState animations:^{
//some animation too
} completion:nil];
[UIView animateWithDuration:0.2 delay:0.2 options:UIViewAnimationOptionBeginFromCurrentState animations:^{
//animation
} completion:nil];
[UIView animateWithDuration:0.1 delay:0.3 options:UIViewAnimationOptionBeginFromCurrentState animations:^{
//some animation too
} completion:^(BOOL finished){
if(segueIdentifier){
[self performSegueWithIdentifier:segueIdentifier sender:self];
}
}];
}];
}
Хорошо, тогда пользовательский код перехода довольно прост:
-(void)perform
{
UIViewController *src = self.sourceViewController;
UIViewController *dst = self.destinationViewController;
[src.navigationController pushViewController:dst animated:NO];
}
И мой второйViewController.m:
-(void)viewWillAppear:(BOOL)animated
{
[super viewWillAppear:animated];
[self menuSlideInDirection:@"RightToCenter" performingSegueWithIdentifier:nil];
}
menuSlideInDirection:@"RightToCenter", выполняющий SegueWithIdentifier:nil во secondViewController, идентичен методу с тем же именем в firstView.
Я ищу плавную анимацию определенных объектов контроллера представления назначения сразу после перехода.
Может быть, все делается неправильно, и есть другой способ сделать это? (Я думаю только о том, чтобы добавить все виды и все элементы управления целевого VC в исходный VC и вообще удалить «целевой VC»).
Надеюсь, кто-нибудь может помочь мне с этим.
performSegueWithIdentifier:. Это пуш, модал? Что это за сиг? Опять же, это, вероятно, не имеет значения; Мне просто было любопытно. Вы правы в том, что помещение обоих представлений в один и тот же VC поставит весь процесс под ваш контроль и позволит вам убедиться, что он проходит гладко. В противном случае вы можете сделать хак, который предложил Рошан. - person Matt Mc   schedule 05.07.2013