2017-10-03 4 views
0

Considérez cela comme une question de quelqu'un qui n'est pas si bon à swift .. :). J'ai un bouton sur le clic duquel le imagepicker est ouvert et je suis en mesure de sélectionner les images. Dans le didFinishPickingMediaWithInfo j'ajouter l'image à un tableau comme si ...Problème avec l'enregistrement de l'image dans la galerie et l'affichage

var imageArray = [UIImage]() 


    func imagePickerController(_ picker: UIImagePickerController, didFinishPickingMediaWithInfo info: [String : Any]) { 

     if let image = info[UIImagePickerControllerOriginalImage] as? UIImage { 

UIImageWriteToSavedPhotosAlbum(image, self, #selector(image(_:didFinishSavingWithError:contextInfo:)), nil) 
     imageArray.append(image) 

    for i in 0..<imageArray.count { 

      imageView.image = imageArray[i] 
      imageView.contentMode = .scaleAspectFit 
      let xPosition = self.view.frame.width * CGFloat(i) 
      imageView.frame = CGRect(x: xPosition, y: 0, width: self.imageScrollView.frame.width, height: self.imageScrollView.frame.height) 

      imageScrollView.contentSize.width = imageScrollView.frame.width * (CGFloat(i + 1)) 
      imageScrollView.addSubview(imageView) 
     } 

    } 
     self.dismiss(animated: true, completion: nil) 
    } 

Je suis aussi avoir ces fonctions:

func saveImage(image: UIImage, path: String) -> Bool { 
    let jpgImageData = UIImageJPEGRepresentation(image, 1.0) 
    do { 
     try jpgImageData?.write(to: URL(fileURLWithPath: path), options: .atomic) 
    } catch { 
     print(error) 
    } 
    return (jpgImageData != nil) 
} 

func getDocumentsURL() -> NSURL { 
    let documentsURL = FileManager.default.urls(for: .documentDirectory, in: .userDomainMask)[0] 
    return documentsURL as NSURL 
} 

func fileInDocumentsDirectory(filename: String) -> String { 
    let fileURL = getDocumentsURL().appendingPathComponent(filename) 
    return fileURL!.path 
} 

Mais mon problème est this..I tout simplement pas vouloir montrer juste une image qui est choisie dans la galerie. Je veux sélectionner plusieurs images de la galerie (une à la fois), les stocker dans un tableau, puis les afficher toutes dans un format de défilement horizontal. A cet effet, je suis en train de régler un scrollview pour prendre les images (comme indiqué dans didFinishPickingMediaWithInfo)

Peut-être que je dois lire l'image aussi. Mais comment cela peut être fait, je ne suis pas en mesure de comprendre ... S'il vous plaît aider!

+0

vous pouvez vous référer à ce lien https://stackoverflow.com/questions/20756899/how-to-select-multiple-images-from-uiimagepickercontroller – DHEERAJ

+0

@DHEERAJ Les bibliothèques de swift ne semblent pas supporter 3 .. . :( – bws

+0

Utilisez l'une des bibliothèques https://stackoverflow.com/a/20756957/1088836 pour choisir plus d'une image à la fois et utiliser CollectionView pour les présenter horizontalement. – mbelsky

Répondre

0

S'il vous plaît voir cette boucle que j'ai corrigé

Vous ne créez un UIImageView et en ajoutant à la scrollview.

S'il vous plaît initialiser le UIImageView chaque fois

for i in 0..<imageArray.count { 
      var imageView = UIImageView()  //*** Add this line to your code 
      imageView.image = imageArray[i] 
      imageView.contentMode = .scaleAspectFit 
      let xPosition = self.view.frame.width * CGFloat(i) 
      imageView.frame = CGRect(x: xPosition, y: 0, width: self.imageScrollView.frame.width, height: self.imageScrollView.frame.height) 

      imageScrollView.contentSize.width = imageScrollView.frame.width * (CGFloat(i + 1)) 
      imageScrollView.addSubview(imageView) 
     } 

Chaque fois que vous mettez à jour votre scrollview avec Newimages ne pas oublier de retirer les anciens.

+0

plusieurs images sont ajoutés maintenant! Mais quand plus d'une image est ajoutée, il y a trop d'espace entre les deux images..plus que l'espacement normal ... :) Peut-on réduire l'espacement entre les images par n'importe quel moyen ...? – bws

0

Utilisez cette option pour enregistrer l'image

var imageArr:[UIImage] = [] 
func imagePickerController(_ picker: UIImagePickerController, didFinishPickingMediaWithInfo info: [String : Any]) { 
      let chosenImage = info[UIImagePickerControllerOriginalImage] as! UIImage 
      UIImageWriteToSavedPhotosAlbum(chosenImage, self, #selector(image(_:didFinishSavingWithError:contextInfo:)), nil) 
      imageArr.append(chosenImage) 

      for i in 0..<imageArray.count 
      { 
       imageView.image = imageArray[i] 
       imageView.contentMode = .scaleAspectFit 
       let xPosition = self.view.frame.width * CGFloat(i) 
       imageView.frame = CGRect(x: xPosition, y: 0, width: self.imageScrollView.frame.width, height: self.imageScrollView.frame.height) 
       imageScrollView.contentSize.width = imageScrollView.frame.width * (CGFloat(i + 1)) 
       imageScrollView.addSubview(imageView) 
      } 

    } 
+0

.. effectivement je voulais enregistrer les images à imageArray, puis montrer les images dans un format de défilement horizontal .. – bws

+0

mis à jour ma réponse –

+0

votre réponse fait enregistrer l'image à l'array. Mais après cela, j'ajoute les images à un scrollview afin de les afficher horizontalement. J'ai mis à jour cela dans le premier extrait de code ci-dessus. Mais le problème est que si je sélectionne 3 images, le tableau affiche le nombre de 3, mais dans le scrollview, seule une image (la plus récente) est affichée. – bws