簡體   English   中英

swift 我的 UIImagePicker 沒有在來自照片庫的 select 圖像上顯示任何圖像

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

大家我拿一個 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)
    }

但它在 select 之后不顯示圖片,圖片來自照片庫,
它向我顯示調試區域中的消息 -

[1098:24494] [發現] 發現擴展時遇到錯誤:錯誤域 = PlugInKit 代碼 = 13“查詢已取消”用戶信息 = {NSLocalizedDescription = 查詢取消}

您正在實施錯誤的didFinishPickingMediaWithInfo方法簽名。

正確的簽名應該是

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

試試這樣:

使您的 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
}()

現在在 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
}

在 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)
    }
}

現在您可以處理選擇的圖像:

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...")
    }
}

如果用戶點擊取消按鈕,請不要忘記設置

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

我遇到了同樣的問題。 解決了。 問題是我忘了添加代表。

imagePicker.delegate = self

意識到:

[1098:24494] [發現] 發現擴展時遇到錯誤:錯誤域 = PlugInKit 代碼 = 13“查詢已取消”用戶信息 = {NSLocalizedDescription = 查詢取消}

只是一個警告。 此消息並不意味着問題

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM