UIImagePickerController 进行相机交互后出现UI冻结/App假死状态

原文地址
  前段时间做了个App,由于App相机非主要功能,所以个人直接调用系统提供的UIImagePickerController,想着原本极为常用的一个类应该没啥问题,但是在这次的开发中却花了不少时间在这个类的使用上,所以选择和大家分享一下开发经历以免有人像我一样在这花了过多的时间找原因。

  先给大家描述一下我的问题场景:

1.首先正常使用以下代码创建和使用UIImagePickerController

self.imagePicker = [UIImagePickerController new];
self.imagePicker.delegate = self;
self.imagePicker.sourceType = UIImagePickerControllerSourceTypeCamera;
[self presentViewController:self.imagePicker animated:YES completion:nil];
...

2.正常的打开拍照界面,于是进行一系列手势操作拍照界面,例如放大、聚焦等。

3.紧接着点击拍照界面上的取消,正常返回主界面。

4.接着点击主界面的控件,所有控件都失去响应似的,即冻结状态,程序并没有崩溃,内存也正常,以及视图调试也没多余的视图遮挡,App就是没有任何交互响应。

5.后来科普了很多相关的信息,又对UIImagePickerController的说明文档细看了一遍,结合业界碰到的问题以及自身出现的情况发现UIImagePickerController中有一个属性可能造成影响,于是尝试修改,修改如下:

self.imagePicker.modalPresentationStyle = UIModalPresentationOverFullScreen;

该属性的说明文档地址

主要表达的内容是:

  该属性决定了如何在屏幕上以何种显示模式呈现视图控制器。 在水平紧凑的环境中,模态视图控制器总是全屏显示。 在横向常规环境中,有几种不同的呈现形式。 有关可能的呈现样式的列表及其与可用的过渡样式的兼容性,请参阅UIModalPresentationStyle常量说明。

本人的App也并非界面十分复杂的App,不知道为什么会受其呈现模式影响,到最终我都还没理解为什么更改为‘UIModalPresentationOverFullScreen’值后App界面冻结问题就解决了,但是本人希望有类似情况的开发者可以尝试修改这个属性,看能否解决类似情况。

你可能感兴趣的:(UIImagePickerController 进行相机交互后出现UI冻结/App假死状态)