让导航栏遵循segue自定义过渡

时间:2014-05-18 12:08:38

标签: objective-c uinavigationbar uistoryboardsegue

我正试图从左边开始有一个新的控制器,因为它是Facebook的习惯。一切都很好,但是因为第二个控制器显示工具栏而另一个没有显示,我发现导航栏总是从顶部掉落,与控制器之后的标准推送过渡不同,因此产生非常不愉快的效果。 我的问题是,第二个视图控制器在推动之前没有导航栏,那时生成一个临时控制器已经太晚了。 这是我在自定义segue中尝试的代码(过渡对于理解发生的情况特别慢):

-(void) perform{
UIViewController* src=(UIViewController*)self.sourceViewController;
UIViewController* dest=(UIViewController*)self.destinationViewController;
CGRect originalSourceRect=src.view.frame;
float width=originalSourceRect.size.width;
CGRect f=CGRectMake(-width, originalSourceRect.origin.y, originalSourceRect.size.width, originalSourceRect.size.height);
CGRect destMain=CGRectMake(width, originalSourceRect.origin.y, originalSourceRect.size.width, originalSourceRect.size.height);
CGRect navigationBarFrame=src.navigationController.navigationBar.frame;
CGRect nb=CGRectMake(-width, navigationBarFrame.origin.y, navigationBarFrame.size.width, navigationBarFrame.size.height);
dest.view.frame=f;
dest.navigationController.navigationBar.frame=nb;
[[src.view superview] addSubview:dest.view];
[dest.navigationController setNavigationBarHidden:NO animated:NO];
[UIView animateWithDuration:.5 animations:^{
    dest.view.frame=originalSourceRect;
    src.view.frame=destMain;
    dest.navigationController.navigationBar.frame=navigationBarFrame;
    } completion:^(BOOL finished) {
        [dest.view removeFromSuperview];
        [src.navigationController pushViewController:dest animated:NO];
    }];
}

0 个答案:

没有答案