Полагаю, проблема в том, что вы не обновляете представление коллекции после загрузки изображений.
Во-первых, ваш getPictures(...)
метод ожидает массив UIImageViews. Но на самом деле вы не можете передать их методу, потому что они динамически создаются в вашем collectionView. Вместо этого вы должны вернуть изображения, как только они загружены. Проблема в том, что изображения загружаются асинхронно. Это означает, что вам нужно использовать обработчик завершения.
func getPictures(imageStrings: [String], completionHandler: @escaping (UIImage) -> ()) {
let storage = Storage.storage();
for index in 0...imageStrings.count - 1 {
let gsReference = storage.reference(forURL: imageStrings[index])
gsReference.getData(maxSize: 15 * 1024 * 1024) { data, error in
if let error = error {
// Uh-oh, an error occurred!
print(error)
return
} else {
completionHandler(UIImage(data: data!))
print(UIImage(data: data!) as Any)
}
}
}
}
Затем вам нужно изменить метод loadImages()
:
func loadImages() {
let dbhelper = DBHelper()
dbhelpergetPictures(imageStrings: [""]) { (loadedImage) in
DispatchQueue.main.async {
self.images.append(loadedImage)
self.collectionView.reloadData()
}
}
}
После этого вам необходимо изменить свой collectionView (numberOfItemsInSection ) метод, чтобы сделать количество отображаемых ячеек равным количеству загруженных изображений:
func collectionView(_ collectionView: UICollectionView, numberOfItemsInSection section: Int) -> Int {
return images.count
}
И, наконец, вам нужно фактически отобразить изображения в UIImageViews внутри представления вашей коллекции:
func collectionView(_ collectionView: UICollectionView, cellForItemAt indexPath: IndexPath) -> UICollectionViewCell {
let cell = collectionView.dequeueReusableCell(withReuseIdentifier: "ImageCollectionViewCell", for: indexPath) as! ImageCollectionViewCell
cell.contentMode = .scaleAspectFill
cell.imageView.image = images[indexPath.row]
return cell
}
Если у вас есть какие-либо вопросы по этому поводу, просто задавайте их в комментариях.
(PS: совет из лучших побуждений: взгляните на быстрые соглашения об именах ( здесь Руководство по стилю ). Все имена, кроме классов, всегда должны начинаться со строчной буквы и описывать их назначение. Пример: var TitleLable: UILabel!
-> var titleLable: UILabel!
и: var titleLable = String()
-> var title = String()
Это будет сделайте ваш код более понятным!)