2013-10-08 3 views
2

У меня проблема с анимацией перехода между двумя контроллерами раскадровки. У меня есть проект singleView с двумя контроллерами представления в раскадровке.Xcode custom segue animation

Теперь я палочка, чтобы сделать заказ анимации перехода:

  • мой текущий контроллер представления должны исчезнуть к левому
  • новый контроллер представления должен исходить от права

Я уже a UIStoryboardSegue класс.

Но что мне написать в методе -(void)perform{} ??

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

Jonas.

+0

Просто напишите «пользовательский SEGUE» в Google, и вы найдете много примеров. Сначала попробуйте, а затем придите сюда с тем, что вы пробовали. один пример: http://blog.jimjh.com/a-short-tutorial-on-custom-storyboard-segues.html – CRDave

+0

И BTW, какая анимация вам нужна, по умолчанию анимация push-segue, вам не нужно писать код для этого , – CRDave

+1

@ CRDave - только если вы хотите использовать UINavigationController. Если вы не хотите использовать этот контроллер, вам необходимо настроить тот же переход. Кажется глупым, что xcode так сильно разрушает mvc (т. Е. Вы можете получить определенный переход, если у вас есть определенный контроллер), но там он есть. – mmr

ответ

11

Для этого простого Segue вы можете попробовать что-то вроде этого:

- (void)perform { 
    UIViewController* source = (UIViewController *)self.sourceViewController; 
    UIViewController* destination = (UIViewController *)self.destinationViewController; 

    CGRect sourceFrame = source.view.frame; 
    sourceFrame.origin.x = -sourceFrame.size.width; 

    CGRect destFrame = destination.view.frame; 
    destFrame.origin.x = destination.view.frame.size.width; 
    destination.view.frame = destFrame; 

    destFrame.origin.x = 0; 

    [source.view.superview addSubview:destination.view]; 

    [UIView animateWithDuration:1.0 
        animations:^{ 
         source.view.frame = sourceFrame; 
         destination.view.frame = destFrame; 
        } 
        completion:^(BOOL finished) { 
         UIWindow *window = source.view.window; 
         [window setRootViewController:destination]; 
        }]; 
} 
+0

спасибо! !! –