ios - imagePicker 中的图像不会显示在我的 imageView 中
问题描述
我的应用程序中有一个 viewController,它会在调用相机时打开。当用户拍照并按下“使用照片”时,图像应该显示在同一个 viewController 的 imageView 中。
我知道它可能看起来像重复(!) - 但我在这里阅读了很多关于显示来自 imagePicker 的图像的问题,到目前为止,他们的解决方案都没有为我工作。
基本上我没有收到任何错误,无论是在控制台还是在代码中。- 但是当我在我的设备上运行该应用程序时,它会在按下“使用照片”后冻结,然后我必须关闭该应用程序。
我现在唯一的想法是有一些一般的隐私使用设置或类似的设置,我需要设置这些设置以显示用户的照片,但在这种情况下,我不知道哪个以及如何设置!
请帮忙!
代码:
class CreateNewPerson: UIViewController, UITextFieldDelegate,
UIImagePickerControllerDelegate, UINavigationControllerDelegate {
@IBOutlet weak var personPhoto: UIImageView!
let imagePicker = UIImagePickerController()
override func viewDidAppear (_ animated: Bool) {
checkCameraPermissions()
super.viewDidAppear(true)
}
private func checkCameraPermissions() {
let status = AVCaptureDevice.authorizationStatus(for: .video)
switch status {
case .authorized: self.presentPicker()
case .notDetermined: self.requestAccess()
case .denied: print("Permission denied.")
case .restricted: print("Permission restricted.")
}
}
private func requestAccess() {
AVCaptureDevice.requestAccess(for: AVMediaType.video) { granted in
if !granted {
print("Error.")
} else {
self.checkCameraPermissions()
}
}
}
private func presentPicker() {
imagePicker.delegate = self
imagePicker.sourceType = .camera
present(imagePicker, animated: true, completion: nil)
}
private func imagePickerController(picker: UIImagePickerController, didFinishPickingMediaWithInfo info: [String : UIImage]) {
let chosenImage = info[UIImagePickerControllerOriginalImage]
imagePicker.delegate = self
personPhoto.contentMode = .scaleAspectFit
personPhoto.image = chosenImage
dismiss(animated: true, completion: nil)
}
}
所以是的 - 基本上这只是最后一个真正成为问题的方法!相机显示所有内容,但我无法显示照片..我的方法有什么问题?
谢谢!
解决方案
由于您只需要提供 iOS 标准图像选择器,因此不需要AVCaptureDevice
这些权限,甚至根本不需要import AVFoundation
!
class CreateNewPerson: UIViewController, UITextFieldDelegate,
UIImagePickerControllerDelegate, UINavigationControllerDelegate {
@IBOutlet weak var personPhoto: UIImageView!
let imagePicker = UIImagePickerController()
private func presentPicker() {
imagePicker.delegate = self
imagePicker.sourceType = .camera
present(imagePicker, animated: true, completion: nil)
}
// Swift 4.2
func imagePickerController(_ picker: UIImagePickerController, didFinishPickingMediaWithInfo info: [UIImagePickerController.InfoKey : Any]) {
let chosenImage = info[UIImagePickerController.InfoKey.originalImage] as! UIImage
personPhoto.contentMode = .scaleAspectFit
personPhoto.image = chosenImage
picker.dismiss(animated: true, completion: nil)
}
/*
// Swift 4.1
func imagePickerController(_ picker: UIImagePickerController, didFinishPickingMediaWithInfo info: [String : Any]) {
let chosenImage = info[UIImagePickerControllerOriginalImage] as! UIImage
personPhoto.contentMode = .scaleAspectFit
personPhoto.image = chosenImage
picker.dismiss(animated: true, completion: nil)
}
*/
}
推荐阅读
- python - 检查 value 是否是给定数量的值之一 - set vs. tuple vs. list
- python - 无法在其中创建带有 pip 的虚拟环境/无法在虚拟环境中运行 python
- fullcalendar - 完整日历 v3 在列表视图中将显示扩展到日历年结束之后
- java - Hibernate:获取按 id ASC 排序的最后 N 行
- java - Completable Future 在内部使用 ReactiveRequest 吗?
- c - 如何修复同时获取两个字符串的错误
- java - 使用ManyToMany关系时如何在Spring中获取对象外键列表?
- c# - 什么是翻译事物的最佳方式(即天)
- c# - 在 C# 中控制传递依赖
- android - 如何将 RecyclerView 数据发送到 BottomSheetDialog