[问题] UICollectionView 的更新加快

楼主: HuangJC (吹笛牧童)   2014-10-31 20:39:09
最近写的程式架构:
1.画面上有其他 ui 按键,比如左右键,以浏览于不同资料间
2.另外再摆一个 UICollectionView,用来展示资料
因此,每按一下左右键,collection view 就要更新一下资料
它内容有数十笔,夸张的说它要更新两秒好了
当 user 快速点击左右键时,这个设计就难以忍受
因为点击左右键的速度大约可以一秒三下
我们另外有摆一个 label,用来指示正在浏览什么资料
如果不更新 collection,情况会很完美,label 会更新得很快
假设我要把 collection 的更新搬到另一个 thread 去做
这会面临'所有 ui 更新都应该在 main thread 做'的经典问题;否决
另一个想法是,左右键更新 label 要快
而 collection 更新慢没有关系;最后再追上而同步即可
但实作上还是有问题
因为当 collection 开始更新,它就是会锁住 ui 两秒
这两秒内如果按 ui, 是不会取得控制权的
(若能取得,我就有解法了;我可以马上更新内部文件
假设目前 cellForItemAtIndexPath 函式回应到第十个元件好了
从第11个起,我可以回它新文件的资料
画面是会半新半旧没错,但不会卡卡
我可以马上下个 reload,下一轮更新时再把文件整个刷新)
因此问题或许是在 collection 更新时,我有没有法子从 ui 取得控制权?
谢谢
作者: tentenlee (天天)   2014-10-31 20:49:00
你先把再cellForItemAtIndexPath内的程式优化吧应该是你作太多东西才会导致太慢,还有cellsize的部份
楼主: HuangJC (吹笛牧童)   2014-10-31 21:23:00
若用一堆小元件去打造,则我自己做的 reload 指令必然要forloop 到所有小元件,这件事我可以要求它能被中断forloop 跑完前 ui 无法取得控制权,所以别用 forloop做
作者: uranusjr (←這人是超級笨蛋)   2014-10-31 21:51:00
你必须把你做的东西描述得更清楚, 甚至提供 minimalreproducing example, 不然你只是在浪费大家(包含你自己)的时间在瞎猜而已。

Links booklink

Contact Us: admin [ a t ] ucptt.com