Swift中App进入前台时两种相机场景的条件判断问题
解决方案
针对HSAttachmentPicker打开相机后无法控制isCameraMode状态的问题,我们可以通过利用第三方库的代理回调和调整状态重置时机来解决,具体步骤如下:
1. 修正isCameraMode的重置逻辑
原代码中在viewDidAppear里直接重置isCameraMode = false会导致相机操作返回后状态被提前清空,需要把重置逻辑移到各个选择器的完成/取消回调中:
override func viewDidAppear(_ animated: Bool) { super.viewDidAppear(animated) if !isCameraMode { NotificationCenter.default.addObserver( self, selector: #selector(applicationWillEnterForeground(_:)), name: UIApplication.willEnterForegroundNotification, object: nil) } // 移除这行:isCameraMode = false }
2. 补全UIImagePickerController的代理回调
确保头像相机操作完成后正确重置状态:
// 扩展实现UIImagePickerController代理 extension YourViewController: UIImagePickerControllerDelegate, UINavigationControllerDelegate { func imagePickerController(_ picker: UIImagePickerController, didFinishPickingMediaWithInfo info: [UIImagePickerController.InfoKey : Any]) { // 处理选中的头像逻辑 picker.dismiss(animated: true) { self.isCameraMode = false } } func imagePickerControllerDidCancel(_ picker: UIImagePickerController) { picker.dismiss(animated: true) { self.isCameraMode = false } } }
3. 实现HSAttachmentPicker的代理回调
通过第三方库的代理方法捕获相机选择事件,并在操作完成后重置状态:
// 扩展实现HSAttachmentPicker代理 extension YourViewController: HSAttachmentPickerDelegate { // 捕获用户选择的来源(相机/相册/文件等) func attachmentPicker(_ picker: HSAttachmentPicker, didSelectSource source: HSAttachmentSource) { // 判断是否选择了相机,设置状态标记 if source == .camera { self.isCameraMode = true } } // 附件选择完成后重置状态 func attachmentPicker(_ picker: HSAttachmentPicker, didSelect attachments: [HSAttachment]) { // 处理选中的附件逻辑 self.isCameraMode = false } // 取消选择后重置状态 func attachmentPickerDidCancel(_ picker: HSAttachmentPicker) { self.isCameraMode = false } }
注:如果
HSAttachmentPicker没有didSelectSource方法,可查看其官方文档确认对应来源选择的回调方法,核心是在用户选择相机时将isCameraMode设为true。
4. 验证逻辑
- 点击头像按钮选择相机:打开相机时
isCameraMode = true,返回后在代理回调中重置为false,applicationWillEnterForeground不会执行目标代码。 - 点击文件上传按钮选择相机:通过
HSAttachmentPicker的代理捕获相机选择事件,设置isCameraMode = true,操作完成后重置,避免触发不必要的服务请求。 - 选择相册/文件时:
isCameraMode不会被设置为true,返回后正常执行原有逻辑。
内容的提问来源于stack exchange,提问作者new dev
相关产品推荐
相关产品推荐

