此自定义 segue 在视觉上可以正常工作,但完成时会出现警告。
Warning: Attempt to present <DestViewController: 0x21059f40> on <SrcViewController: 0x1fd50cf0> whose view is not in the window hierarchy!
任何有关如何在没有警告的情况下使其工作的帮助将不胜感激,在这方面花费的时间比我应该的要多。甚至不确定我是否应该关心它,因为这是一个警告。
- (void)perform {
UIViewController *src = (UIViewController *)self.sourceViewController;
UIViewController *dst = (UIViewController *)self.destinationViewController;
dst.view.alpha = 0;
[UIView animateWithDuration:0.5
animations:^{
[UIView setAnimationCurve:UIViewAnimationCurveEaseInOut];
[src.view addSubview:dst.view];
dst.view.alpha = 1;
}
completion:^(BOOL finished){
[dst.view removeFromSuperview];
//need to understand why this throws a warning but still works
[src presentViewController:dst animated:NO completion:^(){
[src reset];
}];
}];
}
更新
在 src UIViewController 的 reset 方法中有一个停止 MPMoviePlayerController 的调用。出于某种原因导致该问题,一旦删除此 segue 就可以完美运行。有关 segue 的最终实现,请参阅下面的答案。