[問題] 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