2013-09-27 3 views

ответ

2

Я нашел способ имитировать его, который довольно близок к оригиналу.

Вы должны добавить MTAnimation (что необходимо для экспоненциальной непринужденности). Эта библиотека понадобится QuartzCore, поэтому вам придется добавить ее в свои «связанные библиотеки» в «фазах сборки» в настройках проекта, если она еще не добавлена.

А вот код:

толчок контроллер анимации

// Get the views 
UIView * fromView = sourceViewController.view; 
UIView * toView = destinationViewController.view; 
UIView *darkenView = [[UIView alloc] initWithFrame:fromView.frame]; 
[darkenView setBackgroundColor:[UIColor colorWithRed:255 green:255 blue:255 alpha:0]]; 
[fromView addSubview:darkenView]; 

// Get the size of the view area. 
CGRect viewSize = fromView.frame; 

// Add the new view to the old view. 
[fromView.superview addSubview:toView]; 

// Position the new view outside of the screen 
toView.frame = CGRectMake(viewSize.size.width , viewSize.origin.y, viewSize.size.width, viewSize.size.height); 
[UIView mt_animateViews:[NSArray arrayWithObjects:fromView, toView, nil] 
       duration:.55 
     timingFunction:MTTimingFunctionEaseOutExpo 
       options:UIViewAnimationOptionAllowAnimatedContent 
      animations: 
    ^{ 
     // Animate the replacing of the views 
     fromView.frame =CGRectMake(-(viewSize.size.width/3) , viewSize.origin.y, viewSize.size.width, viewSize.size.height); 
     toView.frame =CGRectMake(0, viewSize.origin.y, viewSize.size.width, viewSize.size.height); 
     [darkenView setBackgroundColor:[UIColor colorWithRed:0 green:0 blue:0 alpha:.1]]; 
    } 
       completion: 
    ^{ 
     // Remove the old view 
     [darkenView removeFromSuperview]; 
     [fromView removeFromSuperview]; 
    }]; 

поп-контроллер анимации (например, с кнопкой назад)

// Get the views. 
UIView * fromView = sourceViewController.view; 
UIView * toView = destinationViewController.view; 

// Get the size of the view area. 
CGRect viewSize = fromView.frame; 

// Add the new view to the old view. 
[fromView.superview insertSubview:toView belowSubview:fromView]; 

// Position the new view outside of the screen 
toView.frame = CGRectMake(-(viewSize.size.width/3) , viewSize.origin.y, viewSize.size.width, viewSize.size.height); 

UIView *darkenView = [[UIView alloc] initWithFrame:toView.frame]; 
[darkenView setBackgroundColor:[UIColor colorWithRed:0 green:0 blue:0 alpha:.1]]; 
[toView addSubview:darkenView]; 

[UIView animateWithDuration:0.35 delay:0 options:UIViewAnimationOptionAllowAnimatedContent animations: 
^{ 
     // Animate the replacing of the views 
     fromView.frame =CGRectMake(viewSize.size.width , viewSize.origin.y, viewSize.size.width, viewSize.size.height); 
     toView.frame =CGRectMake(0, viewSize.origin.y, viewSize.size.width, viewSize.size.height); 
     darkenView.frame = toView.frame; 
     [darkenView setBackgroundColor:[UIColor colorWithRed:255 green:255 blue:255 alpha:0]]; 
} 
       completion:^(BOOL finished) 
{ 
    if (finished) 
    { 
     // Remove the old view 
     [fromView removeFromSuperview]; 
     [darkenView removeFromSuperview]; 
    } 
}]; 
Смежные вопросы