简体   繁体   English

swift 我的 UIImagePicker 没有在来自照片库的 select 图像上显示任何图像

[英]swift my UIImagePicker doesn't show any image on select image from photo library

everyone I take an imageView and set an image on it, I want to select an image from the photo library if the user tapped on the image here my code is大家我拿一个 imageView 并在上面设置一个图像,我想 select 如果用户在这里点击图像,我想从照片库中获取一个图像我的代码是

    @IBOutlet weak var uploadImage: UIImageView!
    var imagePicker = UIImagePickerController()
override func viewDidLoad() {
        super.viewDidLoad()
        
        let tapGestureRecognizer = UITapGestureRecognizer(target: self, action: #selector(imageTapped(tapGestureRecognizer:)))
        uploadImage.isUserInteractionEnabled = true
        uploadImage.addGestureRecognizer(tapGestureRecognizer)
    }
    @objc func imageTapped(tapGestureRecognizer: UITapGestureRecognizer)
    {
        print("image tapped")
        if UIImagePickerController.isSourceTypeAvailable(UIImagePickerControllerSourceType.photoLibrary){
            print("Button capture")
            let imag = UIImagePickerController()
            imag.delegate = self as? UIImagePickerControllerDelegate & UINavigationControllerDelegate
            imag.sourceType = UIImagePickerControllerSourceType.photoLibrary;
            imag.allowsEditing = false
            self.present(imag, animated: true, completion: nil)
        }
    }
    
    func imagePickerController(picker: UIImagePickerController!, didFinishPickingImage image: UIImage!, editingInfo: NSDictionary!) {
        let selectedImage : UIImage = image
        uploadImage.image=selectedImage
        self.dismiss(animated: true, completion: nil)
    }

but it doesn't show image after select an image from the photo library,但它在 select 之后不显示图片,图片来自照片库,
it shows me the message in debug area -它向我显示调试区域中的消息 -

[1098:24494] [discovery] errors encountered while discovering extensions: Error Domain=PlugInKit Code=13 "query cancelled" UserInfo={NSLocalizedDescription=query cancelled} [1098:24494] [发现] 发现扩展时遇到错误:错误域 = PlugInKit 代码 = 13“查询已取消”用户信息 = {NSLocalizedDescription = 查询取消}

You are implementing the wrong didFinishPickingMediaWithInfo method signature.您正在实施错误的didFinishPickingMediaWithInfo方法签名。

The correct signature should be正确的签名应该是

func imagePickerController(_ picker: UIImagePickerController, 
  didFinishPickingMediaWithInfo info: [UIImagePickerController.InfoKey : Any])

Try like this:试试这样:

Conform your controller to UIImagePickerControllerDelegate and UINavigationControllerDelegate and declare your imaView programmatically like this:使您的 controller 符合 UIImagePickerControllerDelegate 和 UINavigationControllerDelegate 并像这样以编程方式声明您的 imaView:

class ViewController: UIViewController, UIImagePickerControllerDelegate, UINavigationControllerDelegate {

let imageV: UIImageView = {
    let iv = UIImageView()
    iv.image = UIImage(named: "yourImageName")
    iv.isUserInteractionEnabled = true
    iv.clipsToBounds = true
    iv.contentMode = .scaleAspectFit
    iv.translatesAutoresizingMaskIntoConstraints = false
    
    return iv
}()

Now in viewDidLoad set imageView tap gesture and constraints:现在在 viewDidLoad 中设置 imageView 点击手势和约束:

override func viewDidLoad() {
    super.viewDidLoad()
    
    view.backgroundColor = .black
    
    let gesture = UITapGestureRecognizer(target: self, action: #selector(handlePickImage))
    imageV.addGestureRecognizer(gesture)
    
    view.addSubview(imageV)
    imageV.centerYAnchor.constraint(equalTo: view.centerYAnchor).isActive = true
    imageV.centerXAnchor.constraint(equalTo: view.centerXAnchor).isActive = true
    imageV.heightAnchor.constraint(equalToConstant: 200).isActive = true
    imageV.widthAnchor.constraint(equalToConstant: 200).isActive = true
}

Declare, set and present your pickerController in handlePickImage function:在 handlePickImage function 中声明、设置和呈现您的 pickerController:

var imagePicker = UIImagePickerController()

@objc fileprivate func handlePickImage() {
    
    imagePicker.delegate = self
    imagePicker.sourceType = .photoLibrary
    imagePicker.view.tintColor = .white
    imagePicker.modalPresentationStyle = .fullScreen
    imagePicker.mediaTypes = ["public.image"]
    imagePicker.allowsEditing = false
    imagePicker.navigationBar.barTintColor = .darkGray
    print("tapped....")
    
    if UIImagePickerController.isSourceTypeAvailable(.photoLibrary){
        present(imagePicker, animated: true, completion: nil)
    }
}

Now you can handle your image picked:现在您可以处理选择的图像:

func imagePickerController(_ picker: UIImagePickerController, didFinishPickingMediaWithInfo info: [UIImagePickerController.InfoKey : Any]) {
    
    if let imagePicked = info[UIImagePickerController.InfoKey.originalImage] as? UIImage {
        imageV.image = imagePicked
        print("Image picked height:", imagePicked.size.height, "Image picked width:", imagePicked.size.width)
    }
    
    picker.dismiss(animated: true) {
        print("Picker Dismissed...")
    }
}

Don't forget to set if user tap on cancel button如果用户点击取消按钮,请不要忘记设置

func imagePickerControllerDidCancel(_ picker: UIImagePickerController) {
    picker.dismiss(animated: true, completion: nil)
}

I faced the same problem.我遇到了同样的问题。 It was solve.解决了。 The problem was that I forgot add the delegate.问题是我忘了添加代表。

imagePicker.delegate = self

Be aware that:意识到:

[1098:24494] [discovery] errors encountered while discovering extensions: Error Domain=PlugInKit Code=13 "query cancelled" UserInfo={NSLocalizedDescription=query cancelled} [1098:24494] [发现] 发现扩展时遇到错误:错误域 = PlugInKit 代码 = 13“查询已取消”用户信息 = {NSLocalizedDescription = 查询取消}

Is just a warning.只是一个警告。 This message doesnt mean a problem此消息并不意味着问题

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM