解雇并代表UIImagePickerController摄像头iOS8.4的问题

时间:2015-07-14 01:32:46

标签: ios objective-c animation

编辑问题从头开始恢复。

我有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的这种合作需要比我想要的更多时间。它几乎是瞬间的,但我想要更好的东西。我该怎么做,我做错了什么?

2 个答案:

答案 0 :(得分:0)

有一些可能导致您出现问题的案例:

  1. 在A之后呈现B然后呈现C对于UX / UI和代码来说都是一种奇怪的行为。要么从A推B,然后在B上呈现C,要么取消A,呈现B,解除B,呈现C.

  2. 有完成方法,您没有使用它们。你的代码显示你为C和B调用dismissViewControllerAnimated两次ex。你应该处理提出和解雇的命令。我认为iOS 8.2+或8.3+开始更有效地处理它们。如果出现错误,则会在此版本之后崩溃。

  3. imagepicker控制器在以不同方式解除VC时会导致此错误。对于前者在呈现VC之前显示警报弹出窗口也可能导致崩溃。

答案 1 :(得分:-1)

我相信这对你有用。 做的!

 [self.presentingViewController dismissViewControllerAnimated:NO completion:^{
               [RefrenceOfPreviousViewController dismissViewControllerAnimated:YES completion:^{

               }];
           }];

而不是

 [self.presentingViewController.presentingViewController dismissViewControllerAnimated:NO completion:nil];