自定义转换不能正常工作。 presentViewcontroller ::完成延迟

在过去的几天里,我一直在为自定义视图转换而苦苦挣扎,最后我把它放到了一些代码中,这些代码实际上能够在正确的时间进行想要的帧更改(我有覆盖帧的问题(从我的处理程序/菜单类)的新提出的看法,也试图改变从视图控制器(多数民众赞成将呈现)方法viewdidlayout / viewdidappear等视图框架;原因是,当presentViewcontroller:被调用时,它使整个vc初始化几个调用覆盖帧到原始边界)

好吧,在我开始复杂化之前,让我发布我最后装箱的简单代码:

-(void)presentVCCustom:(UIViewController*)vc{ vc.view.hidden = YES; //menuWindow.hidden = NO; //dispatch_async(dispatch_get_main_queue(), ^{ [self.currentVC presentViewController:vc animated:YES completion:^{ vc.view.frame = CGRectMake([[UIScreen mainScreen]bounds].size.width-100, vc.view.frame.origin.y,vc.view.frame.size.width, vc.view.frame.size.height); [UIView animateWithDuration:0.4 delay:0 options:UIViewAnimationOptionBeginFromCurrentState animations:^{ vc.view.hidden = NO; self.currentVC.view.hidden = YES; NSLog(@"frame: %f", vc.view.frame.origin.x); menuWindow.frame = CGRectMake(-([[UIScreen mainScreen]bounds].size.width-100), 0, [[UIScreen mainScreen]bounds].size.width-100, [[UIScreen mainScreen]bounds].size.height); vc.view.frame = CGRectMake(0, vc.view.frame.origin.y,vc.view.frame.size.width, vc.view.frame.size.height); } completion:^(BOOL finished) { }]; }]; // }); } 

当我在我的第一个菜单上testing时,正在工作,万岁。 然后,我添加了上述方法,在所有情况下都会被调用,并且我注意到一些转换在启动之前有时会有4-5秒的延迟。 我甚至注意到,要呈现的avg slowest vc实际上是一个VC,我还没有开始在o_o中实现逻辑。 无论如何,延迟变化,并通过在控制台debugging我没有发现任何可能会干扰(观察员,定时器,对象引用,线程,我可以想到)。 通过断点,对我来说显而易见的是,它从presentviewcontroller :: completion的完成块,这有点延迟,有时过多。

任何指导我可以做什么来解决这个问题? 我已经尝试了直接在主队列上进行调度,就像您在注释代码中看到的一样。

我不知道为什么完成块有时会迟到。 正常的presentviewcontroller:在任何情况下工作速度非常快,我认为完成版本在presentviewcontroller后立即调用它的块:返回?

提前谢谢了!