我正在尝试使用UIImagePickerController选择图像。我有以下代码,其中有一个UIImageView的IBOutlet。
在didFinishPickingMediaWithInfo中选择图像后,我在内存中获取图像,但不知何故,它在imageview中不可见。我确实尝试在didFinishPickingMediaWithInfo中更改静态图像以进行imageview,但它也没有显示图像。代码如下,
class SnapshotViewController: UIViewController,UINavigationControllerDelegate, UIImagePickerControllerDelegate
{
@IBOutlet var imageView: UIImageView!
@IBAction func takePhoto(sender: AnyObject) {
let imagePicker = UIImagePickerController()
imagePicker.delegate = self
imagePicker.sourceType = .PhotoLibrary
imagePicker.allowsEditing = false
presentViewController(imagePicker, animated: true, completion: nil)
}
func imagePickerController(picker: UIImagePickerController, didFinishPickingMediaWithInfo info: [String : AnyObject]) {
dismissViewControllerAnimated(true, completion: nil)
dispatch_async(dispatch_get_main_queue())
{
let image = info[UIImagePickerControllerOriginalImage] as? UIImage
self.imageView.image = image
}
}
}
我想这是一般性问题,无论我在didFinishPickingMediaWithInfo中为此imageView更改的图像都无效。如果我在viewDidLoad中更改imageView图像,那么它的工作原理。 任何人都可以请求帮助,因为我需要显示通过照片库选择的图像?
答案 0 :(得分:0)
强烈建议不要从后台线程更新UI控件。这可能是奇怪的行为和崩溃的原因,有时很难识别。
尝试在主线程上设置图像:
func imagePickerController(picker: UIImagePickerController, didFinishPickingMediaWithInfo info: [String : AnyObject]) {
let image = info[UIImagePickerControllerOriginalImage] as? UIImage
self.imageView.image = image
dismissViewControllerAnimated(true, completion: nil)
}
答案 1 :(得分:0)
我认为此代码可以解决您的问题并使您的照片库中的照片显示出来:
class PostViewController: UIViewController, UINavigationControllerDelegate, UIImagePickerControllerDelegate {
@IBOutlet var imageToPost: UIImageView!
@IBAction func chooseAnImage(_ sender: AnyObject) {
let imagePicker = UIImagePickerController()
imagePicker.delegate = self
imagePicker.sourceType = UIImagePickerControllerSourceType.photoLibrary
imagePicker.allowsEditing = false
self.present(imagePicker, animated: true, completion: nil)
}
func imagePickerController(_ picker: UIImagePickerController, didFinishPickingMediaWithInfo info: [String : AnyObject]) {
if let image = info[UIImagePickerControllerOriginalImage] as? UIImage {
imageToPost.image = image
}
self.dismiss(animated: true, completion: nil)
}
答案 2 :(得分:0)
在很快的4中,我尝试了各种方法,但是直到我仅向@objc
覆盖方法中添加didFinishPickingMediaWithInfo
注释后,它们才起作用:
输入UIImagePickerController
:
@objc func handleSelectProfileImageView () {
let pickerController = UIImagePickerController()
pickerController.delegate = self
present(pickerController, animated: true, completion: nil)
}
扩展以获取媒体数据(在这一部分中,我必须添加@objc
):
extension MyViewController: UIImagePickerControllerDelegate, UINavigationControllerDelegate {
@objc func imagePickerController(_ picker: UIImagePickerController, didFinishPickingMediaWithInfo info: [String: Any]) {
if let image = info["UIImagePickerControllerOriginalImage"] as? UIImage {
selectedImage = image
profileImage.image = image
}
dismiss(animated: true, completion: nil)
}
}
将此属性应用于可以在其中表示的任何声明 Objective-C-例如,非嵌套类,协议,非泛型 枚举(限于整数原始值类型),属性和 类,协议和方法的方法(包括获取器和设置器) 协议,初始化程序和下标的可选成员。目标 属性告诉编译器可以在其中使用声明 Objective-C代码。