iOS - ничего не отображается в массиве изображений (Swift) - PullRequest
0 голосов
/ 06 сентября 2018

Я пытаюсь назначить изображение для массива, а затем отобразить изображение, однако оно не отображается. Как вы можете видеть, после того, как я назначил изображение для массива следующим образом:

self.imageArray.append(UIImage(data: data!)!)

Я печатаю self.imageArray, и он печатает, так что я знаю, что он там - по какой-то причине он просто не отображается. Он отображался, когда я вручную устанавливал изображения в массиве.

Вот полный соответствующий код

import UIKit

class OpenView: UIViewController {

// Scroll view because I'm going to have multiple images
 @IBOutlet weak var imageScrollView: UIScrollView!

// Receiving the string url for the image
 var fullReceievingImageString: String? = ""

// Establishing the Array
 var imageArray = [UIImage]()

override func viewDidLoad() {
    super.viewDidLoad()

// Convert the url to an image
    if let imageUrl = fullReceievingImageString {
        let url = URL(string: imageUrl)
        URLSession.shared.dataTask(with: url!) { (data, response, error) in
            if error != nil {
                print(error!)
                return
            }
            DispatchQueue.main.async {

// Apply the image to the array
                self.imageArray.append(UIImage(data: data!)!)
                print(self.imageArray)

            }
            }.resume()
    }


// Establish the image view(s)
    for i in 0..<imageArray.count {

        let imageView = UIImageView()
        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)
    }        
}
}

1 Ответ

0 голосов
/ 06 сентября 2018

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

 import UIKit

    class OpenView: UIViewController {

        // Scroll view because I'm going to have multiple images
        @IBOutlet weak var imageScrollView: UIScrollView!

        // Receiving the string url for the image
        var fullReceievingImageString: String? = ""

        // Establishing the Array
        var imageArray = [UIImage]()

        override func viewDidLoad() {
            super.viewDidLoad()

            // Convert the url to an image
            if let imageUrl = fullReceievingImageString {
                let url = URL(string: imageUrl)
                URLSession.shared.dataTask(with: url!) { (data, response, error) in
                    if error != nil {
                        print(error!)
                        return
                    }
                    DispatchQueue.main.async {

                        // Apply the image to the array
                        self.imageArray.append(UIImage(data: data!)!)
                        print(self.imageArray)
                        self.initSubView()

                    }
                    }.resume()
            }



        }
 private func initSubView(){
        // Establish the image view(s)
        for i in 0..<imageArray.count {

            let imageView = UIImageView()
            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)
        }
    }

   }
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...