注意:我已经尝试了所有在stackoverflow上匹配的问题,但都没有帮助解决这个问题/场景,因此现在发帖求助。
我有一个集合视图,其中有许多单元格,每个单元格都有一个图像视图。每个单元格将具有不同的图像数组,我需要通过淡入淡出效果一个接一个地显示它们。第一次显示时显示正确,但滚动后就会出现问题。第一个单元格的图像会显示在其他任何单元格中。图像会混乱。
我有一个集合视图,其中有许多单元格,每个单元格都有一个图像视图。每个单元格将具有不同的图像数组,我需要通过淡入淡出效果一个接一个地显示它们。第一次显示时显示正确,但滚动后就会出现问题。第一个单元格的图像会显示在其他任何单元格中。图像会混乱。
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)
}
})
}
}
}
图片不应该随着滚动而移动,它们应该保持在原来的单元格中。