2011-02-23 86 views
0

繼續我的問題問here,我想知道如何更新viewDidScroll中的用戶界面的方法是正確的。我可以觀察到這種方法被稱爲很多次,可能可能是ui變得緊張和反應遲鈍的原因。 如何增加UI的響應度。 的代碼如下:優化UIScrollview尋呼

BOOL isScrollingDown = verticalScrollView.contentOffset.y > _previousContentOffsetY; 

_previousContentOffsetY = verticalScrollView.contentOffset.y; 

CGFloat pageHeight = verticalScrollView.frame.size.height; 

int scrollingToPageNum = isScrollingDown ? (ceil((verticalScrollView.contentOffset.y - pageHeight)/pageHeight) + 1) : (floor((verticalScrollView.contentOffset.y - pageHeight)/pageHeight) + 1); 
int page = floor((verticalScrollView.contentOffset.y - pageHeight/2)/pageHeight) + 1; 

[self loadPage:(page-1)]; 
[self loadPage:(page)]; 
[self loadPage:(page+1)]; 

/* Unloading the pages not seen in the view is done here*/ 
if (!(isScrollingDown) && scrollingToPageNum >1) { 
    [self unloadPages:page-2]; 
}else { 
    [self unloadPages:page+2]; 
} 

的遲緩裝載技術工作正常和大量內存的使用是由於它降低。但是UI太慢了。另外我想知道如何從一個從URL下載圖像的不同線程更新UI。

TIA, 普利文

回答

0

我不是100%確定這所以仔細檢查。如果您使用Apple的UIScrollView類,則必須更新應用程序主線程中的屏幕。但是,您不需要在同一個線程中下載圖像。閱讀Apple的「併發指南」並查看示例程序以瞭解如何實現。

此外,繪製比他們需要的圖像要花費更長的時間。不要用比視圖中有空間更多的像素來繪製圖像。對於超大圖像將它們分開,所以一次只能繪製部分,Apple爲此提供了示例代碼。當您檢測到停機時間時,請立即在顯示給用戶的內容上繪製一些圖像。因此,用戶在視圖周圍滾動時看不到加載符號。前iPhone 3GS可以處理每個iOS版本的手機變得越來越慢,因爲它有更多的東西來管理手機的速度和保真度,如果用戶快速移動然後如果用戶停止移動,則繪製更高保真度的圖像。

我會稍後更新,如果我有時間與一些鏈接,但上面的這些技巧是爲我工作的。

+0

我使用NSURLConnection來異步下載圖像。並且委託方法更新UI。如果圖像已經下載,則圖像視圖直接用數據更新。這些圖片是來自YouTube的視頻縮略圖。當我滾動它時,我無法弄清UI的jitterniess。我想滾動是完全自由流動,不慢。隨時問我你可能想知道的有關我的實施的任何問題。 – 2011-02-23 18:22:42

+0

問題:你使用什麼設備?它的iOS版本是什麼?你使用的是什麼版本的SDK?你正在下載的圖像的尺寸是多少?圖像的格式是什麼?每張圖片有多少個像素?我可以下載並查看您的項目嗎?我可能會發現其他事情嗎? – Tobias 2011-03-01 21:27:34

+0

@ Gaspy1909 - 對不起,延遲迴復。我正在使用iPod 2g,以便在新設備上更好地工作。它有最新的ios 4.2。 SDK也是最新的應用開發網站。每個圖像大小約爲150x95,作爲uiview的一部分放置在uiimageview中。 – 2011-03-07 05:42:25