man*_*sta 7 camera objective-c ios
我有一个应用程序让你用iphone相机拍照.一切都像魅力一样,但是在新设备上进行测试时,没有足够的存储空间可用,相机应用程序并没有消失.
所以基本上我用源摄像头打开图像选择器,我得到一个弹出窗口,上面写着"没有足够的可用存储空间来拍摄照片......"然后当我按下OK时,我在相机应用程序中,关闭了快门,"拍照"和"取消"按钮都显示为灰色.从这一点来说,我唯一可以做的就是杀死应用程序,因为没有办法离开这个屏幕.
在我的代码中,我用相似的东西调用相机:
UIImagePickerController * photoPicker= [[UIImagePickerController alloc] init];
photoPicker.delegate = self;
photoPicker.sourceType = UIImagePickerControllerSourceTypeCamera;
if ([UIImagePickerController isSourceTypeAvailable:photoPicker.sourceType]) {
[self presentModalViewController:photoPicker animated:YES];
}
Run Code Online (Sandbox Code Playgroud)
调用它的对象当然是UIImagePickerControllerDelegate,我实现了两个委托方法(都正确响应成功和取消事件):
- (void)imagePickerController:(UIImagePickerController *)picker didFinishPickingMediaWithInfo:(NSDictionary *)info;
- (void)imagePickerControllerDidCancel:(UIImagePickerController *)picker;
Run Code Online (Sandbox Code Playgroud)
这种"无空间可用"行为不会落在任何委托方法上,因此我无法以编程方式关闭相机应用程序.
有什么想法吗?
编辑:
当试图在相机不可用的模拟器中运行应用程序时,我注意到应用程序崩溃,因为该源不可用.我发现,即使在调用控制器之前,简单地将不可用的sourceType分配给photoPicker也会使应用程序崩溃,因此我将代码更改为以下内容:
UIImagePickerController * photoPicker= [[UIImagePickerController alloc] init];
photoPicker.delegate = self;
if ([UIImagePickerController isSourceTypeAvailable:UIImagePickerControllerSourceTypeCamera]) {
photoPicker.sourceType = UIImagePickerControllerSourceTypeCamera;
}else{
return;
}
[self presentModalViewController:photoPicker animated:YES];
Run Code Online (Sandbox Code Playgroud)
这仍然无法解决我的问题,但这是一个有趣的发现.
问题不在于相机,而在于应用程序的其余部分:相机被欺骗didReceiveMemoryWarning
,从而“杀死”了您试图返回的视图。它只是不再存在了。
修复方法是实现 UIViewController 的 viewDidLoad、viewDidUnload、viewWillDisappear、viewWillAppear 等,并确保您的应用程序可以处理由 Camera 引起的内存不足情况,并在 Camera 消失时初始化所需的所有内容。