UIImagePickerController 不会停止位置服务

Posted

技术标签:

【中文标题】UIImagePickerController 不会停止位置服务【英文标题】:UIImagePickerController won't stop location services 【发布时间】:2011-05-29 17:45:20 【问题描述】:

基本上我想要完成的是一个增强现实应用程序。我有地图视图和增强现实视图。 当用户只查看地图视图然后返回 UINavigation 堆栈中的上一页时,所有位置服务都将停止并且箭头工具栏通知消失。当用户离开地图视图并以模态方式呈现 UIImagePickerController 时,即使在用户按下负责停止所有位置服务并弹出当前视图的按钮后,位置服务通知仍将保留。 我知道不是我的 CLLocationManager 导致了问题,因为正如我所说,当 UIImagePicker 从未放在屏幕上时不会发生错误。我的想法是,即使我在弹出当前视图之前关闭了模态视图,用于地理定位或相机使用它们的任何位置服务都不会停止。 对于我的生活,我无法弄清楚他们为什么不停止,如果有人可能知道为什么这将是一个巨大的帮助。

这是我现在在准备从 UINavigation 堆栈弹出视图的方法中的代码

[_locationManager setDelegate:nil];
[_locationManager stopUpdatingLocation];
[_locationManager stopUpdatingHeading];
[[UIAccelerometer sharedAccelerometer] setDelegate:nil];
if (_imagePickerOn)
    [self dismissModalViewControllerAnimated:YES];   
    _imagePickerOn = FALSE;

--编辑-- 这是我展示图像选择器的方法,非常基本:

- (IBAction) cameraButtonPressed
_imagePickerOn = TRUE;
[self presentModalViewController:_imagePicker animated:NO];

【问题讨论】:

你能发布你呈现UIImagePickerController对象的方法吗? 你去吧,我将它添加到原始问题中,该方法仅在用户想要离开地图视图并转到增强现实视图时才被调用,并且只有在按下该按钮之后出现问题。我在 viewDidLoad 方法中初始化 imagepicker 不清楚按钮是map view的一部分还是image picker view的一部分?您发布的原始代码是在点击按钮时调用的,对吧? 调用 presentmodalview 的按钮在持有地图视图的 UIView 上。当地图视图或图像选择器视图按下“停止”时,我发布的原始代码块被调用 【参考方案1】:

我假设您提前在别处分配图像选择器控制器。这可能是问题所在——当它的视图离开屏幕时(当你关闭它时),它并没有被释放,所以它仍然在内存中并且可能仍在使用它的位置管理器。这是一个错误,但不是您的错误,因此您将无法使用当前设置对此做太多事情。

一个更常见的模式是只在你将要呈现 UIImagePickerController 之类的东西时分配它们,并在调用 -presentModalViewController:animated: 后立即释放它们。它可以使您的 UI 响应速度稍慢一些,尤其是在分配复杂的视图控制器时(我不确定图像选择器控制器是否符合条件),但是您可以从减少内存使用和 - 希望 - 不再使用位置的好处不需要时提供服务。

【讨论】:

在我发布这个问题之前,我实际上已经尝试过了。我在离开屏幕之前“释放”了它,它仍然显示位置服务通知。我尝试了您建议的更常见的模式,懒惰地初始化它并在它出现后立即释放它,不幸的是仍然得到同样的错误,它在退出时显示仍然在顶部工具栏中的小箭头

以上是关于UIImagePickerController 不会停止位置服务的主要内容,如果未能解决你的问题,请参考以下文章

UIImagePickerController 预览大小与实时大小不一样

UIImagePickerController 在 iOS 13 中不返回实时照片

UIImagePickerController 不尊重 iPad 上的视频最长持续时间

UIImagePickerController 相机不提供​​ URL

UIImagePickerController委托不叫Swift 3

在UIImagePickerController取消按钮不显示?