Примечание. Я перепробовал все подходящие вопросы из-за переполнения стека, но ни один из них не помог исправить эту проблему / сценарий и, следовательно, опубликовал сообщение.
У меня есть представление коллекции, в котором у меня есть количество ячеек, где каждая ячейка имеет один вид изображения. Каждая ячейка будет иметь различный массив изображений, которые мне нужно показывать одно за другим через эффект затухания. Первый раз это показывает правильно, однако, когда я прокручиваю, то возникают проблемы Изображение первой ячейки отображается в любой другой ячейке. Изображения перемешиваются.
extension ViewController: UICollectionViewDelegate,UICollectionViewDataSource,UICollectionViewDelegateFlowLayout {
func collectionView(_ collectionView: UICollectionView, numberOfItemsInSection section: Int) -> Int {
return imagesArray.count
}
func collectionView(_ collectionView: UICollectionView, cellForItemAt indexPath: IndexPath) -> UICollectionViewCell {
let cell = collectionView.dequeueReusableCell(withReuseIdentifier: "collectionCell", for: indexPath)
// let image = cell.viewWithTag(1) as! UIImageView
// let imgArr = imagesArray[indexPath.row]
// image.downloadImageAndAnimateIt(imageStringArray: imgArr)
return cell
}
func collectionView(_ collectionView: UICollectionView, layout collectionViewLayout: UICollectionViewLayout, sizeForItemAt indexPath: IndexPath) -> CGSize {
let size = self.collectionView.bounds.size.width / 2 - 5
return CGSize(width: size, height: size - 5)
}
func collectionView(_ collectionView: UICollectionView, willDisplay cell: UICollectionViewCell, forItemAt indexPath: IndexPath) {
let image = cell.viewWithTag(1) as! UIImageView
let imgArr = imagesArray[indexPath.row]
image.downloadImageAndAnimateIt(imageStringArray: imgArr)
}
}
//=========== END of view controller
extension UIImageView {
func downloadImageAndAnimateIt(imageStringArray:[String]){
var imagesArray = [UIImage]()
for imgStr in imageStringArray{
imagesArray.append(UIImage(named: imgStr)!)
}
let dispatchGroup = DispatchGroup()
// dispatchGroup.notify(queue: DispatchQueue.main) {[weak self] in
// self?.animationImages = imagesArray.compactMap({$0})
// self?.animationDuration = 5.0
// self?.startAnimating()
// }
var photoCount = 0
var timer = Timer()
dispatchGroup.notify(queue: DispatchQueue.main) {[weak self] in
timer = Timer.scheduledTimer(withTimeInterval: 2.0, repeats: true, block: { (timer) in
if (photoCount < imagesArray.count - 1){
photoCount = photoCount + 1;
}else{
photoCount = 0;
}
if let this = self {
UIView.transition(with: this, duration: 2.0, options: .transitionCrossDissolve, animations: {
this.image = imagesArray[photoCount]
}, completion: nil)
}
})
}
}
}
Изображения не должны перемешиваться, и они должны оставаться в той же ячейке, что и до прокрутки.