【问题标题】:UIImageView not updating with new image after picture taken or picture chosen from photo library拍摄照片或从照片库中选择照片后,UIImageView 未使用新图像更新
【发布时间】:2017-04-11 03:21:24
【问题描述】:

在我拍照或从我的照片库中选择一张图片后,我试图在 UIImageView 中填充图像。

这是处理相机和照片库激活的代码:

@IBAction func activateCmera(_ sender: Any) {
    if (UIImagePickerController.isSourceTypeAvailable(.camera)) {
        let imagePicker = UIImagePickerController()
        imagePicker.delegate = self
        imagePicker.sourceType = .camera
        imagePicker.allowsEditing = false
        self.present(imagePicker, animated: true, completion: nil)
    }
}


@IBAction func activatePhotoLib(_ sender: Any) {
    if (UIImagePickerController.isSourceTypeAvailable(.photoLibrary)) {
        let imagePicker = UIImagePickerController()
        imagePicker.delegate = self
        imagePicker.sourceType = .photoLibrary
        imagePicker.allowsEditing = false
        self.present(imagePicker, animated: true, completion: nil)
    }
}

这是在 UIImageView 中填充图像的代码:

@IBOutlet weak var imageView: UIImageView!

func imagePickerController(picker: UIImagePickerController, didFinishPickingMediaWithInfo info: [String : AnyObject]) {
    let image = info[UIImagePickerControllerOriginalImage] as! UIImage
    self.imageView.contentMode = .scaleAspectFit
    self.imageView.image = image
    self.dismiss(animated: true, completion: nil);
}

目前,在我用相机拍照或从照片库中选择图像后,我被重定向到应用程序的初始视图,而 UIImageView 空间没有随照片更新。

感谢任何帮助!

【问题讨论】:

    标签: ios swift image uiimageview


    【解决方案1】:

    我遇到了同样的问题。显然 imagePickerController 函数自上次回答以来又发生了变化。我不得不稍微改变一下函数以使用 Swift 5.4

    / Doesn't work
    func imagePickerController(_ picker: UIImagePickerController, didFinishPickingMediaWithInfo info: [String : Any]) {
    // Does work
    func imagePickerController(_ picker: UIImagePickerController, didFinishPickingMediaWithInfo info: [UIImagePickerController.InfoKey : Any]) {
    

    info 参数现在需要一个 UIImagePickerController InfoKeys 字典。

    【讨论】:

      【解决方案2】:

      **你需要像全局对象一样保存 UIImagePickerController,之后,你需要把这段代码推送到你的动作函数上 **

      @objc func getImage() {
      
          imagePicker.sourceType = UIImagePickerControllerSourceType.photoLibrary
      
          imagePicker.allowsEditing = false
      
          imagePicker.modalPresentationStyle = .overCurrentContext
      
          present(imagePicker, animated: true)
      
      }
      
      func imagePickerController(_ picker: UIImagePickerController, didFinishPickingMediaWithInfo info: [String : Any]) {
      
          if let image = info[UIImagePickerControllerOriginalImage] as? UIImage {
          imageView.image = image
       }
      
      self.dismiss(animated: true, completion: nil);
      
      }
      

      【讨论】:

        【解决方案3】:

        这似乎是与 XCode 未能解释 imagePickerController 函数语法已更改(自 Swift 3 起)有关的问题。你会在网上找到这两种编写函数的方法。您还可以在 XCode 中同时使用这两者而不会出现任何错误。但只有第二个才能真正正确地获取图像。

        (Option 1 - doesn't work, but XCode doesn't flag it):
        func imagePickerController(picker: UIImagePickerController, didFinishPickingMediaWithInfo info: [String : AnyObject]) { }
        
        (Option 2 - this is the right syntax!):
        func imagePickerController(_ picker: UIImagePickerController, didFinishPickingMediaWithInfo info: [String : Any]) { }
        

        【讨论】:

          【解决方案4】:

          Swift 3 中,您需要通过在keys 下方添加plist 来获得访问photoLibrary 的权限,并且您需要使用正确的delegate 方法。

          UIImagePickerControllerDelegate& UINavigationControllerDelegate 添加到您的class 并将imagePicker delegate 设置为viewDidLoad 并尝试以下代码。

              let imagePicker = UIImagePickerController()
          
              @IBAction func activatePhotoLib(_ sender: UIButton) { 
              if UIImagePickerController.isSourceTypeAvailable(UIImagePickerControllerSourceType.photoLibrary) {
                  imagePicker.delegate = self
                  imagePicker.sourceType = UIImagePickerControllerSourceType.photoLibrary;
                  imagePicker.allowsEditing = false
                  self.present(imagePicker, animated: true, completion: nil)
                 } 
               }
          
              func imagePickerController(_ picker: UIImagePickerController, didFinishPickingMediaWithInfo info: [String : Any]) {
              if let image = info[UIImagePickerControllerOriginalImage] as? UIImage {
                  imageView.image = image
               }
              picker.dismiss(animated: true, completion: nil);
              }
          

          输出:updated

          【讨论】:

            猜你喜欢
            • 1970-01-01
            • 1970-01-01
            • 2013-10-01
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 2011-03-30
            • 1970-01-01
            相关资源
            最近更新 更多