ios - Swift 异步图像加载器

标签 ios swift uitableview

我想实现一个带有显示图像的单元格的表格 View 。图像将异步加载。为了更好地滚动,我希望如果单元格滚动出 View ,则取消请求。 到目前为止,我的代码有效,但我不知道如何检测单元格是否可见或已经“滚动”。

这是我的代码:

    func tableView(tableView: UITableView, cellForRowAtIndexPath indexPath: NSIndexPath) -> UITableViewCell {
    let cell = tableView.dequeueReusableCellWithIdentifier("EventsTableCell", forIndexPath: indexPath) as! EventsTableCell
    var elem : Event = data[indexPath.row] as Event

    cell.headlineLabel.text = elem.getName()
    cell.secondLabel.text = elem.getDescription()

    cell.progressView.setProgress(0.0,animated: true)

    if let image = ImageCache.getImage(elem.getId()) {
        cell.coverImage.image = image
        cell.progressView.removeFromSuperview()
    } else {
        cell.coverImage.image = UIImage(named: "loading")
        if(elem.getCover() == nil){
            //NOIMAGE
            cell.progressView.removeFromSuperview()
        }else{
            println("start request for" + elem.getName()!)
            cell.request = Alamofire.request(.GET, elem.getCover()!)
                .progress {
                    (_, totalBytesRead, totalBytesExpectedToRead) in

                    dispatch_async(dispatch_get_main_queue()) {
                        // 6
                        cell.progressView.setProgress(Float(totalBytesRead) / Float(totalBytesExpectedToRead), animated: true)

                        // 7
                        if totalBytesRead == totalBytesExpectedToRead {
                            cell.progressView.removeFromSuperview()
                        }
                    }
                }
                .response { (request, response, data, error) in
                    if error == nil && cell.coverImage.image != nil {
                        ImageCache.addImage(elem.getId(),image: UIImage(data: data!, scale:1)!)
                        cell.coverImage.image = UIImage(data: data!, scale:1)
                    }else{

                    }
            }
        }
    }
    return cell
}

使用以下代码我可以取消请求:

cell.request!.cancel()

我还注意到,progressView有时不显示,或者可能会提前从 super View 中删除,也许有人可以提供帮助。

谢谢 托比亚斯

最佳答案

For better scrolling I want the request to be canceled if the cell scrolls out of the view.

实现tableView:didEndDisplayingCell:forRowAtIndexPath:,并在其中取消该行的下载。这正是此委托(delegate)方法的用途!

关于ios - Swift 异步图像加载器,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32096259/

相关文章:

ios - 部分 UIScrollView 不响应触摸

iphone - 从 UITableView Cell 下载内容

ios - 当用户从日历中选择日期时更新 UITableView

ios - 使用 AVFoundation 暂停视频录制

ios - 使 Sprite 出现在随机的 y 点

iphone - 如何在 iOS(iPhone、iPad)项目中使用 CARingBuffer 类?

ios - 带自定义键盘的 VoiceOver

ios - 使用 sdk paypal 在 swift 3 中键入 NSDecimalNumber

swift - ObjectMapper:使用 Swift 4.2 编译的模块无法在 Swift 4.1.2 中导入:

ios - 向下/向上滚动时,uitableview 中的 uitextfield 文本已被重置 iOS