UIImagePickerController - 自定义叠加层上的重拍按钮(Swift)

问题描述 投票:0回答:2

我正在尝试使用

UIImagePickerController
实现自定义cameraOverlayView。我设法隐藏按钮并拥有自己的界面,但自定义界面会阻止带有“预览”选项和“重拍”的编辑屏幕。我注意到在一些较旧的帖子中添加了两个“
_UIImagePickerControllerUserDidCaptureItem
”、“
_UIImagePickerControllerUserDidRejectItem
”的通知,然后添加和删除覆盖层可以解决问题。但对于 Swift 3,我似乎无法找到如何访问这些通知,并且来自
UIImagePickerController
的委托非常有限。还有别的办法吗?

ios swift uiimagepickercontroller nsnotificationcenter
2个回答
0
投票

幸运的是,到了 2023 年,它现在再次完美运行:

///Standard camera picker which is aware of when the user "takes/retakes".
class OverlayPickerVC: UIImagePickerController {
    
    
    override func viewDidLoad() {
        
        super.viewDidLoad()
        
        NotificationCenter.default
            .addObserver(forName:
                            NSNotification.Name(rawValue:
                            "_UIImagePickerControllerUserDidCaptureItem"),
                         object:nil, queue:nil, using: { [weak self] _ in
                // the user did tap the default shutter button
                // we're now in 'preview' mode
                self?.. for example, hide your crosshairs overlay
        })
        
        NotificationCenter.default
            .addObserver(forName:
                            NSNotification.Name(rawValue:
                            "_UIImagePickerControllerUserDidRejectItem"),
                         object:nil, queue:nil, using: { [weak self] _ in
                // the user did tap the retake button
                // we're now in 'take a photo' mode
                self?.. for example, show your crosshairs overlay
        })
    }
}

我不知道为什么它在 2010 年代对 OP 不起作用,但幸运的是它今天工作得很好。

您可以使用 UIImagePickerController 的完全标准接口,但可以控制“拍摄”“重拍”模式。


-1
投票

您似乎无法访问“重拍”事件,因此还需要创建一个自定义“编辑”屏幕。我在同一个 customCameraOverlay 上有“重新拍摄”和“使用它”的按钮。因此,当用户停止捕获时,我会隐藏记录和取消按钮,并显示重拍并使用它的选项,同时添加预览。因此,当用户单击重拍时,我会再次反转按钮并删除预览视图。同样,“使用它”didfinishcapturing 正在被调用

© www.soinside.com 2019 - 2024. All rights reserved.