gpt4 book ai didi

ios - 刷新图像时显示带有 ActivityIndi​​cator 的图像

转载 作者:行者123 更新时间:2023-11-30 12:42:16 24 4
gpt4 key购买 nike

我正在 Udacity 上从事 VirtualTourist 项目,我们需要在通过 Flickr 客户端刷新图像时显示图像。目前我的实现是只有在图像完全下载后才会显示刷新。该项目要求图像在下载时显示为 ,并且在下载时显示事件指示器。

我的代码如下:

 @IBAction func newCollectionButtonDidTap(_ sender: Any) {
print("FETCHING NEW COLLECTION...")
DispatchQueue.main.async {
self.photos.removeAll()
self.collectionView.reloadData()
print("Reload Data newColVC")
}
for items in fetchedResultsController.fetchedObjects! {
context.delete(items as! NSManagedObject)
}

loadPhotos()
}

func loadPhotos() {
newColActivityIndicator.startAnimating()
newColActivityIndicator.isHidden = false
newCollectionButton.isUserInteractionEnabled = false
newCollectionButton.alpha = 0.4

FlickrClient.sharedInstance.getPhotos(pin.coordinate.latitude as AnyObject, lon: pin.coordinate.longitude as AnyObject, { (results, error) in
if let error = error {
print(error)
} else {
if results != nil {

for result in results! {
let picture = Photo(pin: self.pin, imageData: result as NSData, context: self.context)
self.photos.append(picture)
}

do {
try self.delegate.stack?.saveContext()
} catch let error as NSError {
print("Error saving context in loadPhotos(): \(error.localizedDescription)")
}

DispatchQueue.main.async {
self.collectionView.reloadData()
self.newColActivityIndicator.stopAnimating()
self.newColActivityIndicator.isHidden = true
self.newCollectionButton.isUserInteractionEnabled = true
self.newCollectionButton.alpha = 1.0
print("Reload Data loadPhotos")

}

}
}
})

}



func collectionView(_ collectionView: UICollectionView, cellForItemAt indexPath: IndexPath) -> UICollectionViewCell {
let cell = collectionView.dequeueReusableCell(withReuseIdentifier: "cell", for: indexPath) as! ImageViewCell

cell.activityIndicator.startAnimating()
cell.activityIndicator.isHidden = false

let photo = photos[indexPath.row]

if let photoImage = photo.imageData {
print("PhotoImage present")
DispatchQueue.main.async {
cell.activityIndicator.stopAnimating()
cell.activityIndicator.isHidden = true
cell.imageView?.image = UIImage(data: photoImage as Data)
}

} else {
print("PhotosImage don have")
}

return cell
}

非常感谢这里的一些建议,谢谢!

最佳答案

因此,首先,当您点击 newCollectionButton 时,您将删除核心数据中存储的所有数据以及 Collection View 中显示的所有数据。所以此时, Collection View 没有任何内容可显示。因此它应该是空的,什么也不显示。

现在,我认为您的 loadPhotos 方法返回来自闪烁的照片集合,您将其添加到本地数组和 coredata 中。 Collection View 的数据源必须使用 photos 数组中的数据。

您删除事件指示器,然后重新加载 Collection View 。此时,您已经拥有了显示图像所需的数据。因此,cellForItemAt从本地数组中检索数据,并创建图像并显示它。也许这个过程发生得如此之快,以至于您的 cell.activityIndi​​cator.startAnimating()cell.activityIndi​​cator.stopAnimating() 执行得更快。

由于您的问题不清楚,并且您的 loadPhotos 获取照片数据集合,如果您希望在每个单元格中显示 ActivityIndi​​cator,直到下载所有图像,您可以

  • 仅删除存储在 local/coredata 中的 Photo 对象中存在的图像数据
  • 如果每个单元格中没有图像数据,则使单元格显示事件指示器
  • reloadData() 以便事件指示器启动
  • 调用loadPhotos
  • 下载完所有照片后,清空照片数组,将下载的照片存储到数组中,并调用 reloadData() 以便显示所有图像。

关于ios - 刷新图像时显示带有 ActivityIndi​​cator 的图像,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42093258/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com