- (void)perform {
UIViewController *src = self.sourceViewController;
UIViewController *dest = self.destinationViewController;
CGRect f = src.view.frame;
CGRect originSoourceRect = src.view.frame;
f.origin.y = f.size.height;
[UIView animateWithDuration:0.3 animations:^{
src.view.frame = f;
} completion:^(BOOL finished){
src.view.alpha = 0;
dest.view.frame = f;
dest.view.alpha = 0;
[[src.view superview] addSubview:dest.view];
[UIView animateWithDuration:0.3 animations:^{
dest.view.frame = originSoourceRect;
dest.view.alpha = 1;
}completion:^(BOOL finished){
src.view.alpha = 1;
[src.navigationController pushViewController:dest animated:NO];
}];
}];
}