gpt4 book ai didi

ios - 如何确定何时从 Swift 中的一组图像下载了所有图像?

转载 作者:行者123 更新时间:2023-11-29 01:11:22 25 4
gpt4 key购买 nike

我正在使用 PinRemoteImage 库下载填充 collectionView 的图像。我想根据图像高度动态更新单元格高度,所以我需要知道我的所有图像何时下载,以便我可以重新加载/使我的 collectionViewLayout 无效。确定何时没有更多图像可供下载的最佳方法是什么?

override func collectionView(collectionView: UICollectionView, cellForItemAtIndexPath indexPath: NSIndexPath) -> UICollectionViewCell {

let cell = collectionView.dequeueReusableCellWithReuseIdentifier(reuseIdentifier, forIndexPath: indexPath) as! PinCollectionViewCell

cell.pinImage?.pin_updateWithProgress = true
cell.pinImage?.image = nil

if let pinImageURL = self.pins[indexPath.row].largestImage().url {


cell.pinImage?.pin_setImageFromURL(pinImageURL, completion: ({ (result : PINRemoteImageManagerResult) -> Void in

if let image = result.image {
self.imageArray.append(image)

}

最佳答案

我从未使用过 PinRemoteImage 图像库,但是当您从 iCloud 下载不起作用时在完成 block 上回复,导致愚蠢的进程背景,然后在它下载所有数据之前触发您的完成子句。这是我需要实现以解决该问题的 CloudKit 代码的摘录。

它正在使用一个 NSOperationalQueue,代码在这里。警告如果您的任何图像下载失败,此代码将进入无限循环,最好的情况是创建僵尸,最坏的情况是停止您的应用程序。

注意 self.filesQ.returnQThumbs 是一个检查下载图像大小的子例程,如果它们大于零它有一个,如果它们是零/零它仍在下载...它返回它在中找到的数字阵列。 self.filesQ.qcount() 返回它要下载的图像数量。

func preThumb() {

newQueue = NSOperationQueue()

let operation2 = NSBlockOperation(block: {
print("Downloaded, you can now use")
})

operation2.completionBlock = {
print("Operation 2 completed")
}

let operation1 = NSBlockOperation(block: {
var allclear = 0


while (allclear != self.filesQ.qcount()) {
allclear = self.filesQ.returnQThumbs().count
}
})

operation1.completionBlock = {
print("Operation 1 completed")

// your code to display images could go here!

self.newQueue.addOperation(operation2)
}

operation1.qualityOfService = .Background
newQueue.addOperation(operation1)
}

显然,理想情况下,您可能不需要在开始下载之前运行此方法。

关于ios - 如何确定何时从 Swift 中的一组图像下载了所有图像?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35714642/

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