Bei der Auswahl eines Bildes aus der Bildauswahl in iOS 10 Swift 3 wird eine Fehlermeldung angezeigt: Creating an image format with an unknown type is an error
func imagePickerController(picker: UIImagePickerController, didFinishPickingImage image: UIImage, editingInfo: [String : AnyObject]?) {
imagePost.image = image
self.dismiss(animated: true, completion: nil)
}
Das Bild wird nicht ausgewählt und aktualisiert. Ich benötige Hilfe oder Vorschläge, um zu wissen, ob die Syntax oder etwas in Bezug auf diese Methode in iOS10 oder Swift 3 geändert wurde oder ob es eine andere Möglichkeit gibt, dies zu tun.
didFinishPickingMediaWithInfo info: [String : Any]
Antworten:
Der unten genannte Code hat das Problem für mich gelöst -
func imagePickerController(_ picker: UIImagePickerController, didFinishPickingMediaWithInfo info: [String : AnyObject]) { if let image = info[UIImagePickerControllerOriginalImage] as? UIImage { imagePost.image = image } else{ print("Something went wrong") } self.dismiss(animated: true, completion: nil) }
quelle
Denken Sie daran, einen Delegaten zu sich selbst hinzuzufügen
let picker = UIImagePickerController() picker.delegate = self // delegate added
quelle
Der folgende Code hat das Problem gelöst:
Wenn der Benutzer Änderungen am ausgewählten Bild vornimmt, ziehen Sie nur dieses Bild, andernfalls ziehen Sie die Originalbildquelle ohne Änderungen und schließen Sie schließlich den Bildauswahl-Ansichts-Controller.
public func imagePickerController(_ picker: UIImagePickerController, didFinishPickingMediaWithInfo info: [String : Any]){ if let image = info[UIImagePickerControllerEditedImage] as? UIImage { imageView.image = image } else if let image = info[UIImagePickerControllerOriginalImage] as? UIImage { imageView.image = image } else{ print("Something went wrong") } self.dismiss(animated: true, completion: nil) }
quelle
Wenn Sie die Bearbeitung des Bildes zulassen,
imageController.allowsEditing = true
müssen Sie zuerst das bearbeitete Bild abrufen: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 } }
quelle
Die von Jeetendra Choudhary akzeptierte Lösung funktioniert. Obwohl in Xcode 8 mit Swift 3 festgestellt wurde, dass eine Warnung generiert wird:
Instance method 'imagePickerController(_:didFinishPickingMediaWithInfo:)' nearly matches optional requirement 'imagePickerController(_:didFinishPickingMediaWithInfo:)' of protocol 'UIImagePickerControllerDelegate'
und schlägt vor, entweder @nonobjc oder ein privates Schlüsselwort hinzuzufügen, um die Warnung stumm zu schalten. Wenn Sie die Warnung mithilfe dieser Vorschläge stumm schalten, funktioniert die Lösung jedoch nicht mehr.
quelle
Ich habe festgestellt, dass die Standardbilder in der Fotobibliothek dieses Problem beheben können. Wenn Sie ein Bild von Ihrem Computer auf den Simulator ziehen und auswählen. Dieses Problem ist gelöst
quelle
Laut Abdurohmans Antwort ändere ich meinen Code und löse das Problem, danke.
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) }
quelle
Fügen Sie dies zu viewDidload () hinzu
imagepicker.delegate = self
quelle
Fügen Sie "_" in die Funktionsparameter ein.
von
func imagePickerController(picker: UIImagePickerController ...
zu
func imagePickerController(_ picker: UIImagePickerController ...
quelle
Das hat bei mir funktioniert:
func imagePickerController(_ picker: UIImagePickerController, didFinishPickingMediaWithInfo info: [String : Any]) { if let image = info[UIImagePickerControllerOriginalImage] as? UIImage { imageView.image = image self.dismiss(animated: true, completion: nil) } }
quelle
Wenn dies jemandem hilft, ist dies passiert, als ich UIImageView unterklassifiziert habe, um eine abgerundete Ansicht zu erstellen. Es passierte auch, als ich die folgende Zeile in viewDidLoad () hinzufügte.
imageView.layer.cornerRadius = self.imageView.frame.size.width / 2
Am Ende habe ich die Zeile in viewWillLayoutSubViews hinzugefügt und es hat funktioniert. Weitere Informationen finden Sie hier:
clipsToBounds führt dazu, dass UIImage in iOS10 und XCode 8 nicht angezeigt wird
quelle
func imagePickerController(_ picker: UIImagePickerController, didFinishPickingMediaWithInfo info: [String : Any]) { let image = info[UIImagePickerControllerOriginalImage] as? UIImage self.dismiss(animated: true, completion: nil) self.imageTook.image = image }
quelle
Ändern Sie
didFinishPickingMediaWithInfo info: [String : AnyObject]
zudidFinishPickingMediaWithInfo info: [String : Any]
quelle
Für Xcode 8.1 mit Swift 3, nachdem Sie die Delegate-Methode wie folgt geändert haben
ändere dein
func imagePickerController(picker: UIImagePickerController, didFinishPickingImage image: UIImage, editingInfo: [String : AnyObject]?) { imagePost.image = image self.dismiss(animated: true, completion: nil) }
Funktion zu
func imagePickerController(_ picker: UIImagePickerController, didFinishPickingMediaWithInfo info: [String : Any]) { imagePost.image = info[UIImagePickerControllerOriginalImage] as? UIImage picker.dismiss(animated: true, completion: nil) }
Ich habe vergessen, UINavigationControllerDelegate zusammen mit UIImagePickerControllerDelegate hinzuzufügen
class ViewController:UIViewController,UIImagePickerControllerDelegate,UINavigationControllerDelegate
Sie hätten am Anfang gerne eine Variable hinzugefügt
var imagePicker = UIImagePickerController ()
und Setzen von delegate und Aufrufen einer Funktion in viewdidload () als
imagePicker.delegate = self viwImagePick()
Erklären Sie dann diese Funktion als
//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) } }
Jetzt wird das Bild der Bildansicht aus der Bibliothek hinzugefügt
quelle
Ich denke, Sie vermissen eine Verbindung zwischen photoImageView und dem Bild.
Schauen Sie sich meine Screenshots unten an:
quelle
Ich denke, Sie vermissen eine Verbindung zwischen photoImageView und dem Bild.
Schauen Sie sich meine Screenshots unten an:
Viel Glück!
quelle
func imagePickerController(_ picker: UIImagePickerController, didFinishPickingMediaWithInfo info: [String : Any]) { if let image = info[UIImagePickerControllerOriginalImage] as? UIImage { imgViewPhoto.image = image } else{ print("Something went wrong") } picker.dismiss(animated: true, completion: nil) }
quelle
Stellen Sie sicher, dass Sie auch den
UINavigationControllerDelegate
Delegierten einbeziehen. Dies löste das Problem für mich.quelle
versuchen Sie es unten
func imagePickerController(_ picker: UIImagePickerController, didFinishPickingMediaWithInfo info: [String : Any]) { print("image selected"); let selectedImage = info[UIImagePickerControllerOriginalImage] as! UIImag self.dismiss(animated: true, completion: nil) UIImg.image = selectedImage }
quelle
Das hat bei mir funktioniert. Kopieren Sie es einfach und fügen Sie es genau ein.
func imagePickerController(_ picker: UIImagePickerController, didFinishPickingMediaWithInfo info: [String : Any]) { // The info dictionary contains multiple representations of the image, and this uses the original. let selectedImage = info[UIImagePickerControllerOriginalImage] as! UIImage // Set photoImageView to display the selected image. photoImageView.image = selectedImage // Dismiss the picker. dismiss(animated: true, completion: nil) }
quelle
Nachdem ich das Bild von didFinishPickingMediaWithInfo erhalten hatte, rief ich an:
func prepareImageForSaving(image:UIImage) { // create NSData from UIImage guard let imageData = UIImageJPEGRepresentation(image, 1) else { // handle failed conversion print("jpg error") return } self.saveImage(imageData: imageData as NSData) } func saveImage(imageData: NSData) { imageDatas = imageData }
um es im NSData-Format zu speichern.
Die Konsole warnte mich immer noch vor "[Allgemein] Das Erstellen eines Bildformats mit einem unbekannten Typ ist ein Fehler", aber zumindest wird meine imageView auf das ausgewählte Bild aktualisiert, anstatt das vorherige von viewDidLoad anzuzeigen.
quelle
// Bildauswahl mit Sammlungsansichtsklasse ViewController: UIViewController, UIImagePickerControllerDelegate, UINavigationControllerDelegate, UICollectionViewDataSource, UICollectionViewDelegate {
@IBOutlet var img: UIImageView! @IBOutlet weak var collview: UICollectionView! var image = NSMutableArray() let imgpkr = UIImagePickerController() override func viewDidLoad() { super.viewDidLoad() imgpkr.delegate = self } @IBAction func btnselect(_ sender: UIButton) { imgpkr.allowsEditing = true // false imgpkr.sourceType = .photoLibrary imgpkr.mediaTypes = UIImagePickerController.availableMediaTypes(for: .photoLibrary)! present(imgpkr, animated: true, completion: nil) } func imagePickerController(_ picker: UIImagePickerController, didFinishPickingMediaWithInfo info: [String : Any]) { let choose = info[UIImagePickerControllerOriginalImage]as!UIImage let edit = info[UIImagePickerControllerEditedImage]as!UIImage img.contentMode = .scaleAspectFit img.image = edit //MARK:- Add image in collview image.add(edit) collview.reloadData() dismiss(animated: true, completion: nil) } func imagePickerControllerDidCancel(_ picker: UIImagePickerController) { dismiss(animated: true, completion: nil) } //MARK:- Collection View func collectionView(_ collectionView: UICollectionView, numberOfItemsInSection section: Int) -> Int { return image.count } func collectionView(_ collectionView: UICollectionView, cellForItemAt indexPath: IndexPath) -> UICollectionViewCell { let cell = collview.dequeueReusableCell(withReuseIdentifier: "cell", for: indexPath)as! CollectionViewCell1 cell.img1.image = image.object(at: indexPath.item)as! UIImage return cell }
quelle
Für mich bekam ich den Fehler:
wenn Sie imagein imagepicker auswählen.
Um das Problem zu umgehen, habe ich die Steckdose für die
imageView
erneut erstellt.quelle