目前,
我为用户提供了一个Feed 它使用了uitableview和 在tableview中有一个用于多图像的uicollectionview。
'像'或者'评论'功能运作良好 但是当用户点击“喜欢”时会出现一些问题。
我不想显示几处变化, 但是当用户点击“喜欢”时,我需要重新加载一个单元格,它会在短时间内显示另一张图片(重复使用bcs)并返回原始图像。
我尝试使用函数prepareForReuse()。 但是,我不确定如何在重新加载时保持当前屏幕上的相同图像。你知道吗?
有关更多信息, 让我展示我的tableview的一部分< CellForItemAt'和collectionview的方法相同。
func collectionView(_ collectionView: UICollectionView, cellForItemAt indexPath: IndexPath) -> UICollectionViewCell {
let cell = collectionView.dequeueReusableCell(withReuseIdentifier: "storyCell", for: indexPath) as! StoryPhotoCollectionViewCell
let imageURL = photoList[indexPath.row]
let url = URL(string: imageURL)
DispatchQueue.main.async {
cell.imageView.kf.setImage(with: url, placeholder: #imageLiteral(resourceName: "imageplaceholder"), options: nil, progressBlock: nil, completionHandler: nil)
}
cell.imageView.kf.indicatorType = .activity
return cell
}
collectionView的数据源是photoList数组,所以在tableview中,我有这个代码。
DispatchQueue.main.async {
cell.photoList = (story.imageArray?.components(separatedBy: ",").sorted())!
}
答案 0 :(得分:0)
问题应该是由于图像的异步下载延迟,
我相信你的代码会像这样
cell.image = nil; // or some placeholder image
cell.image = downloadFromURL(SOME_URL)
在分配图像之前添加此单行代码
<xsl:template match="/graph">
<xsl:for-each select="tag[starts-with(@name, 'A_start')] ">
<xsl:if test="not(following-sibling::tag[@name=concat('A_end', substring-after(current()/@name, 'A_start'))])">
<xsl:copy-of select="."/>
</xsl:if>
</xsl:for-each>
</xsl:template>
如果可能,请提供更多信息
答案 1 :(得分:0)
如果我理解你的问题,你需要:
你启动一个计时器,如:
让countTimeBeforeChangeMyImageBack = DispatchTime.now()+。秒(waitTimeBeforeStartCounting)
DispatchQueue.main.asyncAfter(截止日期:deadlineTime,执行:{ self.YourMethodToChangeYourImageBack })
在您的方法YourMethodToChangeYourImageBack中,您将原始图像设置回来。 在这里,请记住您可能需要在更新UI之前加入主线程:
//在回调后重新加入主队列 DispatchQueue.main.sync(){ //您的代码更新图像 }
希望它有所帮助。