比如新闻列表tableview,每个cell都有图片,从cell[0]滑到cell[40]时要经过cell[20],只是经过,最后停下来时cell[20]不在屏幕内。那么 cell[20]的图片应该不需要下载?怎么做到?
我的思路是:delay加载,但这样体验会不会不好?

解决方案 »

  1.   

    tableview是继承自uiscrollview的
    我的思路是通过scrollview停止滚动的代理方法来控制加载图片,停止滚动时加载此时可视cell的图片
      

  2.   

    加载网络图片可以另开一个线程,异步加载。不然肯定会卡顿,用户体验不好。异步加载网络图片时,可以先预设一个placeholder image (占位图片),不会存在体验度不好的情况,反而是优化了用户体验。
      

  3.   

    版主说得对。用SDWebImage可以很简单就做到,加上图片的链接和占位图片好了,其他都不用考虑。
      

  4.   

    其实没必要取消,用户还是会滑过来的。再者,如果图片已经下载了一部分,那取消后下次又要重新下载。最多去SDWebImageDownloader里设置下并发下载数就好了
      

  5.   

    你的回答和我的提问不符合啊为什么没必要?
    之前忘了问你有没有用第三方的异步图片加载框架,如SDWebImage,不过话又说回来,用不用关系也不大。我之所以认为没有必要,是有三个原因,一是从体验上,你下载的图片肯定是要经过缓存的,既然缓存到本地了,就算这次用不到下次也能用到,对用户来说,他滑动tableView的时候就能看到图片是很爽的;二是从技术上,一个新闻缩略图能有多大?你还担心当前下载的图片过多,导致当前屏幕内的图片显示太慢?而且有一点很重要,UITableViewCell是被UITableView复用的,也就是说你在cell获取到ImageView和不在屏幕中显示的某一个ImageView是同一个,它在下载的同时会取消上一次的下载,这样一来就能保证屏幕中的cell总是在下载当前屏幕需要显示的图片(SDWebImage也会在下载的同时取消上一次的下载任务),所以不需要你去手动取消;三是从逻辑上,你如果要手动取消一次下载任务,逻辑是很复杂的,TableView的contentOffset在实时变化,需要显示的cell也是实时变化,你没有一个很好的时机去判断取消哪个,cell的willMoveToWindow也不一定会执行,因为TableView很可能只是更新了它的frame,然后你可能会想到layoutSubviews方法总之,我觉得没有必要