2016-09-11 38 views
2

我们正在努力取消已发送的请求,当我们使用集合视图单元格..(我不是说当我们要取消请求的情况下,因为我们已经发送了相同的请求)...我猜测我们需要使用方法:cancelRequestForRequestReceipt ..问题在于不清楚如何获取此RequestReceipt。取消图像下载与AlamofireImage

例子:

我们有不同的图像集合视图(每幅图像有不同的URL)..如果我将回来和向前滚动快,方法af_cancelImageRequest将做的工作,并不会造成2活跃请求相同的URL ..超级!,问题是当我们试图只滚动到1个方向,我们有1000个图像..基本上我们希望能够取消刚刚发送的请求,在图像返回之前,意味着我们没有图像,我们不AlamofireImage继续这个请求...在细胞消失后(由互联网和巨星滚动导致)..所以,如果我得到它的权利,我们可以使用cancelRequestForRequestReceipt ...问题是我们无法找到如何获得这个Reques tReceipt ...

BTW:我看到的例子代码AlamofireImage演示应用程序,

override func prepareForReuse() { 
    super.prepareForReuse() 

    imageView.af_cancelImageRequest() 
    imageView.layer.removeAllAnimations() 
    imageView.image = nil 
} 

正如我所说的,只有在请求已经在操作队列此代码将取消图片的请求..

帮助:)

回答

1

我想你误会AlamofireImage在这个例子中就是这么做的,但首先让我们了解什么是prepareForReuse方法。

每当细胞将要离队这种方法被调用,这意味着,例如,如果你说你滚动向前和向后快速这种方法将被调用,如果你在一个方向上ň滚动快图像每次单元消失时都会调用此方法。

当您通过UIImageView调用方法并在UITableViewCell中存在引用时,您不需要RequestReceipt,因为该请求将被取消。

在快进和快退的情况下,正确的处理方式并不是取消它,而是通过油门来防止这种行为。

AlamofireImage这是一个非常伟大的图书馆,但我认为你可以享受使用KingFisher得多,它为您处理中的快进和后退过程中,细胞的其他情况下的情况下throtle被出队和请求没有完成。

然而这个库处理所有为你努力工作,你不需要重新发明轮子我的建议是你学习什么是幕后发生的,以及如何使它如果这些库还不存在。

我希望这对你有所帮助。

+0

谢谢@Victor Sigler!我会检查KingFisher :) – Sosily

+0

@Victor Sigler,请指出负责KingFisher“节制”的文档(或更好的源文件)吗? – kean