2017-10-03 6 views
0

これは、迅速ではあまり良くない人からの質問として考えてください:)。画像。ギャラリーに画像を保存して表示する際に問題が発生する

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 
} 

しかし、私の問題はthis..Iだけではないんです。didFinishPickingMediaWithInfoで私はまた、これらの機能を抱えているので...

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

ような配列に画像を追加していますギャラリーから選択された1つの画像だけを表示したい。ギャラリーから複数の画像を1つずつ選択して配列に格納し、それらをすべて水平スクロール形式で表示したいとします。この目的のために、私は画像を取るためにscrollviewを設定しています(didFinishPickingMediaWithInfoで与えられるように)

多分私も画像を読む必要があります。しかし、どうやってそれを行うことができるのか分かりません...助けてください!

+0

このリンクを参照することができます。https://stackoverflow.com/questions/20756899/how-to-select-multiple-images-from-uiimagepickercontroller – DHEERAJ

+0

@DHEERAJ迅速なライブラリは、迅速な3 .. : – bws

+0

ライブラリの1つhttps://stackoverflow.com/a/20756957/1088836を使用して、時間ごとに複数の画像を選択し、CollectionViewを使用して水平に表示してください。 – mbelsky

答えて

0

を保存します。

newImagesは、古いものを削除することを忘れてはいけないと

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

たびは今まであなたがscrollviewを更新するとUIImageViewを初期化してください。

+0

複数の画像が今追加されます!しかし、複数の画像を追加すると、両方の画像の間隔が広すぎます。通常の間隔よりも大きくなります。:)画像間の間隔を任意に縮小できますか? – bws

0

これを使用して、私はあなたが唯一のUIImageViewを作成し、scrollviewに追加する

修正したこのループを参照してください画像

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

..実際には、画像をimageArrayに保存してから、水平スクロール形式で画像を表示したいと考えていました。 – bws

+0

私の回答が –

+0

に更新されました。しかし、その後、スクロールビューにイメージを追加して、それらを水平スクロール方式で表示します。私は上記の最初のコードスニペットでそれを更新しました。しかし問題は、3つの画像を選択すると配列にカウントが3として表示されますが、スクロールビューでは1つの画像(最新のもの)のみが表示されます。 – bws

関連する問題