我正在使用iPhone应用程序,该应用程序使用UIImagePickerController的相机覆盖视图。但是,我遇到的问题是,当拍摄照片并弹出预览屏幕时,我的叠加仍然在屏幕上。这看起来很奇怪。所以,我需要做两件事之一,这两件事都证明比我希望的更难:
我知道我可以通过设置showsCameraControls = NO来完成#2 - 但是,我目前没有创建自己的相机控件,我仍然想使用默认控件。看起来像是一个大锤的方法,我需要使用自定义构建的界面重新创建一个完美的UI,以便绕过预览屏幕。
另一方面,我觉得内置相机不使用预览屏幕很烦人,但Apple显然迫使应用程序竭尽全力避免使用它。看起来很奇怪。
答案 0 :(得分:1)
确保将代理设置为imagePicker.delegate=self;
并调用委托方法
- (void) imagePickerController:(UIImagePickerController *)picker didFinishPickingMediaWithInfo:(NSDictionary *)info;
从superview中删除imagePicker.view
的位置(取决于你调用它的方式)
我希望有帮助
答案 1 :(得分:1)
我关闭了相机控件。这样做会关闭预览屏幕。因此,您可以从那里创建自己的预览屏幕(或者根本没有预览屏幕,而我只是在调用takePicture()之后使用照片。当您调用takePicture()函数时,您会得到正确的回调离开是
let vc = UIImagePickerController()
vc.sourceType = .camera
vc.showsCameraControls = false
let mask = MyMaskXibClassMask(vc, self)
vc.cameraOverlayView = mask.view
vc.cameraOverlayView?.frame = self.view.bounds
self.present(vc, animated: true, completion:
{
if let camvc = vc.visibleViewController
{
camvc.addChild(mask)
}
})
在MyMaskXibClassMask上有您要拍照的按钮以及您需要的其他任何地方。然后也在我们的MyMaskXibClassMask下
@IBAction func take_picture()
{
camera.delegate = self
camera.takePicture()
}
当您调用“ takePicture()”时,您的代表将被呼叫(因此您可以完全跳过预览)
func imagePickerController(_ picker: UIImagePickerController, didFinishPickingMediaWithInfo info: [UIImagePickerController.InfoKey : Any])
答案 2 :(得分:0)
您必须使用NSNotificationCenter
以及@" _UIImagePickerControllerUserDidCaptureItem"和@" _UIImagePickerControllerUserDidRejectItem"。
进入预览视图时,您可以删除叠加层:)可在此处找到工作代码示例:https://stackoverflow.com/a/23899448/1933185