Проблема с BSimagepicker, показывающим только последнее изображение, выбранное в прокрутке подкачки Swift - PullRequest
0 голосов
/ 09 мая 2020

Мой Bsimagepicker позволяет мне выбрать 3 изображения и разместить их на подкачке UIScrollView, но первые два изображения отсутствуют и появляется последнее изображение. Он работал до того, как что-то изменилось. поэтому средство выбора изображений должно выбрать до 3 изображений и поместить изображения в режим прокрутки страниц с индикатором страницы, чтобы вы могли видеть, какое изображение в галерее вы просматриваете. Любая помощь будет принята с благодарностью

enter image description here
enter image description here enter image description here enter image description here

     @objc func uploadImg( sender: UIButton) {
     PhotoArray.removeAll()
     SelectedAssets.removeAll()
     self.fillImg.isHidden = true
     let imagePicker = ImagePickerController()
     imagePicker.settings.selection.max = 3
     imagePicker.settings.theme.selectionStyle = .numbered
     imagePicker.settings.fetch.assets.supportedMediaTypes = [.image]
     imagePicker.settings.selection.unselectOnReachingMax = true

     let start = Date()
     self.presentImagePicker(imagePicker, select: { (asset) in
         print("Selected: \(asset)")
     }, deselect: { (asset) in
         print("Deselected: \(asset)")
     }, cancel: { (assets) in
         print("Canceled with selections: \(assets)")
     }, finish: { (assets) in
         for i in 0..<assets.count
         {
             self.SelectedAssets.append(assets[i])

         }

         self.convertAssetToImages()

         print("Finished with selections: \(assets)")
     }, completion: {
         let finish = Date()
         print(finish.timeIntervalSince(start))


     })

     }

func convertAssetToImages() -> Void {

       if SelectedAssets.count != 0{


           for i in 0..<SelectedAssets.count{



               let manager = PHImageManager.default()
               let option = PHImageRequestOptions()
               var thumbnail = UIImage()
               option.isSynchronous = true


               manager.requestImage(for: SelectedAssets[i], targetSize: CGSize(width: 1000, height: 1000), contentMode: .aspectFill, options: option, resultHandler: {(result, info)->Void in
                   thumbnail = result!

               })


            let data = thumbnail.jpegData(compressionQuality: 0.7)
            let newImage = UIImage(data: data!)


            self.PhotoArray.append(newImage! as UIImage)


            scrollImg.image = PhotoArray[i]
            scrollImg.contentMode = .scaleAspectFill
            let xPosition = scrollView.frame.width * CGFloat(i)
            scrollImg.clipsToBounds = true
            scrollImg.frame = CGRect(x: xPosition, y: 0, width: scrollView.frame.width , height: scrollView.frame.height)
            scrollView.contentSize.width = scrollView.frame.width * CGFloat(PhotoArray.count)
            self.pageC.numberOfPages = PhotoArray.count
            scrollView.addSubview(scrollImg)
                           }


    }
       }

1 Ответ

1 голос
/ 10 мая 2020

scrollImg - это один и тот же экземпляр UIImageView для каждого взаимодействия, поэтому отображается только последнее изображение, чтобы избежать этого, вам нужно создать экземпляр scrollImg для каждого взаимодействия, здесь есть два варианта:

scrollImg = UIImageView(frame: CGRect(x: xPosition, y: 0, width: scrollView.frame.width , height: scrollView.frame.height)
scrollImg.image = PhotoArray[i]
scrollImg.contentMode = .scaleAspectFill
let xPosition = scrollView.frame.width * CGFloat(i)
scrollImg.clipsToBounds = true
scrollView.contentSize.width = scrollView.frame.width * CGFloat(PhotoArray.count)
self.pageC.numberOfPages = PhotoArray.count
scrollView.addSubview(scrollImg)

или

func setupSlideScrollView(_ photoArray: [UIImage]) {
    scrollView.contentSize = CGSize(width: view.frame.width * CGFloat(photoArray.count), height: scrollView.frame.height)
    scrollView.isPagingEnabled = true

    for (i, img) in photoArray.enumerated() {
        let imageView = UIImageView(frame:
            CGRect(x: view.frame.width * CGFloat(i), y: 0, width: view.frame.width, height: scrollView.frame.height)
        )
        imageView.image = img
        imageView.contentMode = .scaleAspectFill
        scrollView.addSubview(imageView)
    }
}
...