编辑问题从头开始恢复。
我有ViewController
A ,其中有一个导航栏按钮,其中显示UIImagePickerController
源类型UIImagePickerControllerSourceTypeCamera
,我们将调用此ViewController 乙即可。在 A 的didFinishPickingMediaWithInfo:
方法中,我将呈现ViewController C 。
问题现在从这里开始。当我最终达到 C 时,我们可以清楚地看到视图堆栈:
A -modal-> B -modal-> C
从 C 然后我有一个"返回"导航栏上的按钮应该会带我回到 B 。但是,由于 B 是一个UIImagePickerController,我不能重复使用它,它必须被解雇。所以,为了实现这一点,我目前有以下方法执行#34; Back" C :
上的按钮- (IBAction)backOnPost:(UIBarButtonItem *)sender
{
[self.view endEditing:YES];
UINavigationController *LogControl = [self.storyboard instantiateViewControllerWithIdentifier:@"LogControl"];
RGLogViewController *logView = (RGLogViewController *)LogControl.topViewController;
[UIView animateWithDuration:0.25 animations:^{
self.presentingViewController.view.alpha = 0;
[self.presentingViewController dismissViewControllerAnimated:NO completion:nil];
[self.presentingViewController.presentingViewController dismissViewControllerAnimated:NO completion:nil];
} completion:^(BOOL finished){
[logView setBoolBackPushed];
}];
}
上述代码的工作原理是,它通过解除 B 和 C 将我带回 A 。但是,您仍然可以看到过渡,因为有一些"黑色筛选"从解雇两个ViewControllers。您可以在完成块[logView setBoolBackPushed];
中看到,这会将静态BOOL变量设置为true,以便 A 的viewWillAppear:
的开头显示新{{1}立即 - 方法如下:
UIImagePickerController
目前我正在获得以下预期效果:从 A 转到相机( B ),转到 C ,然后回到新的相机,这是我们的新 B 。这是通过几乎完美的无缝过渡来实现的。
我仍然有能力略微看到过渡的问题。另一个问题是时机。解散和呈现ViewControllers的这种合作需要比我想要的更多时间。它几乎是瞬间的,但我想要更好的东西。我该怎么做,我做错了什么?
答案 0 :(得分:0)
有一些可能导致您出现问题的案例:
在A之后呈现B然后呈现C对于UX / UI和代码来说都是一种奇怪的行为。要么从A推B,然后在B上呈现C,要么取消A,呈现B,解除B,呈现C.
有完成方法,您没有使用它们。你的代码显示你为C和B调用dismissViewControllerAnimated两次ex。你应该处理提出和解雇的命令。我认为iOS 8.2+或8.3+开始更有效地处理它们。如果出现错误,则会在此版本之后崩溃。
imagepicker控制器在以不同方式解除VC时会导致此错误。对于前者在呈现VC之前显示警报弹出窗口也可能导致崩溃。
答案 1 :(得分:-1)
我相信这对你有用。 做的!
[self.presentingViewController dismissViewControllerAnimated:NO completion:^{
[RefrenceOfPreviousViewController dismissViewControllerAnimated:YES completion:^{
}];
}];
而不是
[self.presentingViewController.presentingViewController dismissViewControllerAnimated:NO completion:nil];