1

Вопрос по ios, iphone – Заменить один вид другим с помощью собственной анимации перехода?

Я пытаюсь реализовать SUBJ, но не могу сделать так, чтобы в моей анимации отображался переход к месту назначения. Я хочу сделать анимацию для изменения вида, где новый переход заменит старый. В настоящее время мой метод перформанса выглядит следующим образом:

- (void) perform {

UIViewController *src = (UIViewController *) self.sourceViewController;
UIViewController *dst = (UIViewController *) self.destinationViewController;

[UIView animateWithDuration:2.0
                 animations:^{

                 //tried a lot of staff to make dst view to fall from top at the same time as current view falling to bottom but failed. 

                 src.view.transform=CGAffineTransformMakeTranslation(0, 480);
                 }
                 completion:^(BOOL finished){ 
                     [[self sourceViewController] presentModalViewController:[self destinationViewController] animated:NO];
                 }
    ];
}

Любые идеи, как я могу добавить в мой блок анимации новый вид, появляющийся сверху?

Большое спасибо!

РЕДАКТИРОВАТЬ:

- (void) perform {

    UIViewController *src = (UIViewController *) self.sourceViewController;
    UIViewController *dst = (UIViewController *) self.destinationViewController;

    src.view.transform = CGAffineTransformMakeTranslation(0, 0);
    dst.view.transform = CGAffineTransformMakeTranslation(0, -480);

    [UIView animateWithDuration:2.0
                 animations:^{
                         [src.view addSubview:dst.view];
                         src.view.transform = CGAffineTransformMakeTranslation(0, 460);

                     }
                     completion:^(BOOL finished){ 
                         [src presentModalViewController:dst animated:NO];
                     }
     ];

}

Вот как я это сделал в конце.

  • Еще раз спасибо за помощь мне. То, что я сейчас нашел, попробовав ваш код: анимация происходит в разных видах. Так что, если я использую ваш код и меняю вид до завершения анимации, я буду видеть только анимацию вида dst. Любые идеи, как я могу сделать их оба анимированными одновременно без каких-либо грязных патчей, таких как один большой супер-просмотр или другой неприятный код? Чтобы сделать это ясно. Если я использую presentModalViewController до и после завершения, я вижу только анимацию src view. Если я использую его раньше, я вижу только второй вид анимации. И я понятия не имею, как их объединить

    от Alexandr
  • Спасибо за ваш ответ. Уверен, что ты был прав, новый - это ДСТ. Каким-то образом ничего не изменилось, и во время анимации представление dst не появляется. Также я не понял, почему presentModalViewController здесь не так.link Я взял это отсюда.

    от Alexandr
  • Вы правы, простите, я не слишком увлекаюсь раскадровкой. Повысил мой ответ. Надеюсь, это поможет. это мой последний шанс выглядеть серьезно. ;)

    от
  • до после завершения = до завершения анимации *

    от Alexandr
  • это легко! ...stackoverflow.com/a/25482006/294884

    от Fattie
  • 4

    Я не совсем понимаю

    что вы подразумеваете под новым и старым, поэтому я предполагаю, что new = dst и old = src.

    - (void) perform {
    
       UIViewController *src = (UIViewController *) self.sourceViewController;
       UIViewController *dst = (UIViewController *) self.destinationViewController;
    
       src.view.transform = CGAffineTransformMakeTranslation(0, 0);
       dst.view.transform = CGAffineTransformMakeTranslation(0, -480);
    
       [UIView animateWithDuration:2.0
                     animations:^{
                         [src presentModalViewController:dst animated:NO];
                         src.view.transform = CGAffineTransformMakeTranslation(0, 480);
                         dst.view.transform = CGAffineTransformMakeTranslation(0, 0);
                     }
       ];
    }
    

    Это должно сделать это.