“Creating an image format with an unknown type is an error” with UIImagePickerController

后端 未结 23 1824
长发绾君心
长发绾君心 2020-11-28 09:08

While choosing an image from the image picker in iOS 10 Swift 3 I am getting an error - Creating an image format with an unknown type is an error



        
相关标签:
23条回答
  • 2020-11-28 09:24

    According Abdurohman's answer, i change my code and solve the problem,thanks.

    func imagePickerController(_ picker: UIImagePickerController, didFinishPickingMediaWithInfo info: [String : Any]) {
        let selectedImage = info[UIImagePickerControllerOriginalImage] as! UIImage
    
        photoImageView.image = selectedImage
    
        // Dismiss the picker.
        dismiss(animated: true, completion: nil)
    }
    
    0 讨论(0)
  • 2020-11-28 09:26

    Add "_" in function parameters.

    from

    func imagePickerController(picker: UIImagePickerController ...
    

    to

    func imagePickerController(_ picker: UIImagePickerController ...
    
    0 讨论(0)
  • 2020-11-28 09:27

    For Xcode 8.1 with swift 3, After changing the delegate method as below

    change your

    func imagePickerController(picker: UIImagePickerController, didFinishPickingImage image: UIImage, editingInfo: [String : AnyObject]?) {
    
        imagePost.image = image
        self.dismiss(animated: true, completion: nil)
    }
    

    function to

    func imagePickerController(_ picker: UIImagePickerController, didFinishPickingMediaWithInfo info: [String : Any])
    
        {
    
    
    imagePost.image = info[UIImagePickerControllerOriginalImage] as? UIImage
     picker.dismiss(animated: true, completion: nil)
    
    }
    

    I forgot to add UINavigationControllerDelegate along with UIImagePickerControllerDelegate in

    class ViewController:UIViewController,UIImagePickerControllerDelegate,UINavigationControllerDelegate
    

    You would have added an variable at the beginning like

    var imagePicker = UIImagePickerController()

    and setting delegate and call a function in viewdidload() as

     imagePicker.delegate = self
     viwImagePick()
    

    Then explain that function as

      //ImagePicker
        func viwImagePick(){
    
    
            let alert = UIAlertController(title: nil, message: "Choose your source", preferredStyle: UIAlertControllerStyle.alert)
    
            alert.addAction(UIAlertAction(title: "Camera", style: UIAlertActionStyle.default) { (result : UIAlertAction) -> Void in
                print("Camera selected")
                self.openCamera()
    
                //Code for Camera
                //cameraf
            })
            alert.addAction(UIAlertAction(title: "Photo library", style: UIAlertActionStyle.default) { (result : UIAlertAction) -> Void in
                print("Photo selected")
                self.openGallary()
    
                //Code for Photo library
                //photolibaryss
            })
    
    
            self.present(alert, animated: true, completion: nil)
               }
    
    
    
        func openCamera()
        {
            imagePicker.sourceType = UIImagePickerControllerSourceType.camera
            if UIDevice.current.userInterfaceIdiom == .phone
            {
                self.present(imagePicker, animated: true, completion: nil)
            }
            else
            {
                let popover = UIPopoverController(contentViewController: imagePicker)
    
                popover.present(from: profileImgViw.frame, in: self.view, permittedArrowDirections: UIPopoverArrowDirection.any, animated: true)
    
            }
        }
    
        func openGallary()
        {
            imagePicker.sourceType = UIImagePickerControllerSourceType.savedPhotosAlbum
            if UIDevice.current.userInterfaceIdiom == .phone
            {
                self.present(imagePicker, animated: true, completion: nil)
            }
            else
            {
               let popover = UIPopoverController(contentViewController: imagePicker)
    
                popover.present(from: profileImgViw.frame, in: self.view, permittedArrowDirections: UIPopoverArrowDirection.any, animated: true)
    
    
            }
        }
    

    Now the image is added to image view from the library

    0 讨论(0)
  • 2020-11-28 09:32

    If this helps anyone, I had this happen when I subclassed UIImageView to create a rounded view. It also happened when I added the below line in viewDidLoad()

    imageView.layer.cornerRadius = self.imageView.frame.size.width / 2
    

    I ended up adding the line in viewWillLayoutSubViews and it worked. See this for more details:

    clipsToBounds causes UIImage to not display in iOS10 & XCode 8

    0 讨论(0)
  • 2020-11-28 09:33

    If you allow editing of the picture imageController.allowsEditing = true then you will need to get the edited image first:

    func imagePickerController(_ picker: UIImagePickerController, didFinishPickingMediaWithInfo info: [String : AnyObject]) {
        picker.dismissViewControllerAnimated(true, completion: nil)
    
        if let image = info[UIImagePickerControllerEditedImage] as? UIImage {
            imagePost.image = image
        } else if let image = info[UIImagePickerControllerOriginalImage] as? UIImage {
            imagePost.image = image
        } else {
            imagePost.image = nil
        }
    }
    
    0 讨论(0)
  • 2020-11-28 09:33

    I think you are missing a connection between photoImageView and the image.

    Take a look my screenshots below:

    Good luck!

    0 讨论(0)
提交回复
热议问题