使用UICollectionView实现瀑布流的性能问题。
zedzhaoLayout 用的是 CHTCollectionViewWaterfallLayout,图片都是从网络下载。 图片加载使用SDWebImage~ 最后出来的效果滑动时会有点卡。 应该还是加载图片的线程过多阻塞到UI线程了。
我试了在cellForIndex中判断当view在滑动时不去加载图片,但是最后的效果不太好,配合SDWebImage似乎会有很多图片没缓存到。 请教下大家有没有遇到过类似的问题?
万分感谢。
你可以参考一下UITableView的传统例子,LazyTableImages,虽然不完全相同,但是机理应该是一样的
图片异步加载就不会影响到性能
嗯 异步加载 我之前实现一个异步加载 很简单的 不过 要是高性能 还是要仔细规划一下
我再补充一点儿,就是异步图片加载要在CollectionView.dragging==NO和CollectionView.Decelerating==NO的时候。
你应该用Instrument来看到底是哪里占时间多。 我最近的一个例子,写一个Date Picker,要 tile 很多日期,iPhone5一屏有50多个,开始非常卡。因为WWDC 2013上说UIFontDescriptor的系统开销相当小,我没想是这点,后来用Instrument一看,好家伙,UIFontDescriptor的一个方法调用居然占了40%的时间,后来缓存一下生成的UIFont对象而不是每次都从UIFontDescriptor生成就好了。
再提供一个思路 可以自己子类化UIImageView,在这里实现图片的异步加载和缓存 这样在其他地方也可以复用了
SDWebImage肯定是已经实现了异步下载图片的。 我估计应该有两个问题。
- 这个瀑布流一屏差不多要12张以上的图片,(这里线程过多会有问题么?)
- 尺寸要等加载好了自己算,算好了存一个数组,然后在heightForCell中返回各个cell的高度,然后再调用reloadAtIndexPath去调整layout。(感觉这里也不太合理)。
- LazyTableImages里面的思路不错,在scrolling的状态下什么都不做
缓存到还没用过~~~不知道会不会很复杂~~有空研究下~~