我正在尝试使用
UIImagePickerController
实现自定义cameraOverlayView。我设法隐藏按钮并拥有自己的界面,但自定义界面会阻止带有“预览”选项和“重拍”的编辑屏幕。我注意到在一些较旧的帖子中添加了两个“_UIImagePickerControllerUserDidCaptureItem
”、“_UIImagePickerControllerUserDidRejectItem
”的通知,然后添加和删除覆盖层可以解决问题。但对于 Swift 3,我似乎无法找到如何访问这些通知,并且来自 UIImagePickerController
的委托非常有限。还有别的办法吗?
///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 的完全标准接口,但可以控制“拍摄”“重拍”模式。
您似乎无法访问“重拍”事件,因此还需要创建一个自定义“编辑”屏幕。我在同一个 customCameraOverlay 上有“重新拍摄”和“使用它”的按钮。因此,当用户停止捕获时,我会隐藏记录和取消按钮,并显示重拍并使用它的选项,同时添加预览。因此,当用户单击重拍时,我会再次反转按钮并删除预览视图。同样,“使用它”didfinishcapturing 正在被调用