UITableView優化技巧5

2021-07-22 07:05:39 字數 3105 閱讀 8170

上篇我們講到了tableview是繼承自scrollview,假如cell中有比較多的需要通過網路載入,這時候我們可以利用scrollview的**來進行網路請求的時機選擇從而減小網路開銷和效能損耗。這是看了一篇關於uiscrollview 實踐經驗後得到的啟發。

首先我們得了解scrollview的幾個常用的**方法。為了方便理解,特地把方法進行排序,滑動時呼叫順序從上到下

//在手指開始滑動的時候進行呼叫,在滑動過程中可以多次呼叫

- (void)scrollviewwillbegindragging:(uiscrollview *)scrollview;

//只要產生偏移量,就會呼叫這個方法,並且不分**和手勢

- (void)scrollviewdidscroll:(uiscrollview *)scrollview;

//即將結束拖動的時候呼叫

- (void)scrollviewwillenddragging:(uiscrollview *)scrollview withvelocity:(cgpoint)velocity targetcontentoffset:(inout

cgpoint *)targetcontentoffset;

//手指結束拖動的時候呼叫,在滑動過程中可以多次呼叫

- (void)scrollviewdidenddragging:(uiscrollview *)scrollview willdecelerate:(bool)decelerate;

//手指離開螢幕後,在didenddragging後呼叫

- (void)scrollviewwillbegindecelerating:(uiscrollview *)scrollview;

如下圖

在ios5以後,scrollview多了乙個**方法- (void)scrollviewwillenddragging:(uiscrollview *)scrollview withvelocity:(cgpoint)velocity targetcontentoffset:(inout cgpoint *)targetcontentoffset

這個方法能夠在你手手指拖動結束的時候計算出tableview的contentoffset,注意這裡的contentoff是乙個指標,這意味我們可以修改這個值,從而設定最終偏移量使滑動看起來更順暢,呃,跑遍了,目前暫時不會用到修改這個指標。我們拿到這個contentoffset後,就可以得到滑動結束後的可視矩形visiblerect的範圍。

另外,這時候呼叫tableviewcell- (uitableviewcell *)tableview:(uitableview *)tableview cellforrowatindexpath:(nsindexpath *)indexpath方法時,假如cell中需要網路請求,這時候我們可以先暫時不請求,只需要把imageview的大小確定(通過伺服器傳回來的imagesize)。然後根據cgrect targetrect = cgrectmake(targetcontentoffset->x, targetcontentoffset->y, scrollview.frame.size.width, scrollview.frame.size.height);獲取到滑動目的地的targetrect。這時候**如下:

- (void)scrollviewwillenddragging:(uiscrollview *)scrollview withvelocity:(cgpoint)velocity targetcontentoffset:(inout

cgpoint *)targetcontentoffset

- (void)scrollviewwillbegindragging:(uiscrollview *)scrollview這個方法中我們先將self.targetrect設為nil,這時候我們可以根據tableview的visiblecells獲取到當前螢幕中正在顯示的cell,然後先進行判斷後在進行網路請求,那麼如何判斷呢?1.先判斷需要顯示的imageview是否存在與modelarray[indexpath.row]相同的sd_imageurl,這是為了排除cell重用的弊端。2.然後判斷targetrect是否與當前可視的cell的frame有交集,可以利用cgrectintersectsrect(cgrect rect1, cgrect rect2)進行判斷,假如沒有交集,不需要進行的網路載入。

- (void)scrollviewwillbegindragging:(uiscrollview *)scrollview

- (void)scrollviewwillenddragging:(uiscrollview *)scrollview withvelocity:(cgpoint)velocity targetcontentoffset:(inout

cgpoint *)targetcontentoffset

- (void)scrollviewdidenddecelerating:(uiscrollview *)scrollview

- (uitableviewcell *)tableview:(uitableview *)tableview cellforrowatindexpath:(nsindexpath *)indexpath

- (void)configurecell:(hyimagecell *)cell withindexpath:(nsindexpath *)indexpath

if (shouldloadimage)

}

UITableView效能優化

uitableview效能優化 一直以來uitableview效能一直是個很嚴重的問題,uitableview效能優化的幾個關鍵點如下 1,盡量使用不透明的檢視。2,重用uitableviewcell。3,減少子檢視數量,自定義uitableviewcell,並在其drawrect 中自行繪製 更好...

UITableView效能優化

1.原理 uitableview是uiscrollview的子類,因此它可以自動響應滾動事件 一般為上下滾動 它內部包含0到多個uitableviewcell物件,每個table cell展示各自的內容。當新cell需要被顯示時,就會呼叫tableview cellforrowatindexpath...

如何優化UITableView效能

使用不透明檢視。不透明的檢視可以極大地提高渲染的速度。因此如非必要,可以將table cell及其子檢視的opaque屬性設為yes 預設值 其中的特例包括背景色,它的alpha值應該為1 例如不要使用clearcolor 影象的alpha值也應該為1,或者在畫圖時設為不透明。不要重複建立不必要的t...