我正在使用iPhone应用程序,该应用程序使用UIImagePickerController的相机覆盖视图。但是,我遇到的问题是,当拍摄照片并弹出预览屏幕时,我的叠加仍然在屏幕上。这看起来很奇怪(图片是旋转的,但不是叠加)。所以,我需要做两件事之一,这两件事都证明比我希望的更难:
我知道我可以通过设置showsCameraControls = NO来完成#2 - 但是,我目前没有创建自己的相机控件,我仍然想使用默认控件。看起来像是一个大锤的方法,我需要使用自定义构建的界面重新创建一个完美的UI,以便绕过预览屏幕。
答案 0 :(得分:1)
可以使用showsCameraControls = YES;
并避免预览视图上的叠加。我有同样的问题,可以通过使用NSNotificationCenter
和@“_ UIImagePickerControllerUserDidCaptureItem”和@“_ UIImagePickerControllerUserDidRejectItem”来解决它。
进入预览视图时,您可以删除叠加层:)可在此处找到工作代码示例:https://stackoverflow.com/a/23899448/1933185
答案 1 :(得分:1)
我仍然不知道有人在追随此问题,但是可以弹出并显示/显示另一个屏幕/叠加层以进行其他修剪/裁剪/编辑,以及取消滚动时保持相同滚动级别的文件夹。
此处的代码段:
您想显示图像选择器的地方
present(imagePicker, animated: true)
然后在选择完成时(此问题仅在选择视频时发生)
func imagePickerController(_ picker: UIImagePickerController, didFinishPickingMediaWithInfo info: [UIImagePickerController.InfoKey : Any]) {
let mediaType = info[UIImagePickerController.InfoKey.mediaType] as! String
if (mediaType == "public.image"){
NSLog("%@", "got image")
}else if (mediaType == "public.movie"){
NSLog("%@", "got movie")
// dismiss(animated: true)
let trimView = storyBoard.instantiateViewController(withIdentifier: "TrimView") as! TrimViewController
trimView.delegate = self
trimView.modalPresentationStyle = .pageSheet
imagePicker.popViewController(animated: false)
imagePicker.present(trimView, animated: true)
}
}
添加一些额外的委托或进行编译,但是在TrimViewController的取消处理程序中执行此操作,以返回到UIImagePickerController拾取视图的最后一个位置
func didFinishTrim() {
imagePicker.dismiss(animated: true)
}
希望有帮助!
答案 2 :(得分:0)
据我所知,如果不使用AVFoundation创建自己的自定义图像选择器,这是不可能的。这个问题的最佳答案是here