我有一個包含大圖像的UIScrollView,並使用分頁在圖像之間滾動。爲了節省內存,我只在當前可見的圖像前後加載一個圖像,並在滾動完成後加載/釋放新圖像。UIScrollView中的惰性加載頁面
快速滾動並且不調用scrollViewDidEndDecelerating
時會出現此問題。
如何檢測連續滾動?
我可以在每scrollViewDidScroll
檢查項目的位置,但這個似乎有點重......
我有一個包含大圖像的UIScrollView,並使用分頁在圖像之間滾動。爲了節省內存,我只在當前可見的圖像前後加載一個圖像,並在滾動完成後加載/釋放新圖像。UIScrollView中的惰性加載頁面
快速滾動並且不調用scrollViewDidEndDecelerating
時會出現此問題。
如何檢測連續滾動?
我可以在每scrollViewDidScroll
檢查項目的位置,但這個似乎有點重......
我的臨時解決方案是從用戶,直到滾動完成提起手指禁用滾動取消連續滾動。
-(void) scrollViewWillBeginDecelerating:(UIScrollView *)scrollView
{
[scrollView setScrollEnabled:NO];
}
- (void)scrollViewDidEndDecelerating:(UIScrollView *)scrollView
{
[scrollView setScrollEnabled:YES];
}
你可以做這樣的事情
-(void)scrollViewDidScroll:(UIScrollView *)scrollView {
CGFloat pageWidth = scrollView.frame.size.width;
int page = floor((scrollView.contentOffset.x - pageWidth/1.5)/pageWidth) + 1;
}
調用此方法在任何時候改變contentoffset是否編程或沒有。
從這種方法中,你可以檢查'page'是否與你當前頁面相同,如果沒有,你知道你需要加載一些東西。這裏的技巧是讓圖像加載而不需要保持滾動視圖的滾動。那是我卡住的地方。
當你中途下頁
頁面計算將改變下一個/上如果你還在尋找一個解決方案......這是我做的,它的工作有一個良好的表現真的很不錯也是。
- (void)scrollViewDidEndDragging:(UIScrollView *)sv willDecelerate:(BOOL)decelerate
{
if (!decelerate)
{
// load images and unload the ones that are not needed anymore
[self someMethod]
}
}
- (void)scrollViewDidEndDecelerating:(UIScrollView *)sv
{
// load images and unload the ones that are not needed anymore
[self someMethod]
}
即使我有和Jean一樣的問題。我嘗試了scrollViewDidEndDragging方法:willDecelerate:但是,每當scrollViewDidEndDecelerating沒有被調用時,scrollViewDidEndDragging:willDecelerate:也不會被調用。我該如何解決這個問題? – spd 2011-03-18 03:49:19
也許與自定義單元格內容的表格視圖將更好地爲你,因爲它有很多的邏輯建立在只加載那些可見的一次反對一切細胞。有很多關於如何以各種方式管理表視圖的教程。
您必須同時檢查scrollViewDidEndDecelerating和scrollViewDidScroll。 當用戶滑動並釋放它時讓第一個「勢頭」滾動將在和處被調用。如果用戶決定通過點擊tableview(或滾動到最底部,但我不確定)用他的手指停止滾動,則會觸發第二個事件。
根據我的經驗,@ jd291是正確的;我使用下面的回調成功地爲大多數地方
-(void)scrollViewWillBeginDragging:(UIScrollView *)scrollView
-(void)scrollViewDidScroll:(UIScrollView *)scrollView
-(void)scrollViewDidEndDragging:(UIScrollView *)scrollView willDecelerate:(BOOL)decelerate
但是,唯一的情況下,當一個callback
不叫的是,你可能沒有建立delegate
正常。
WWDC 2010已經討論過這個問題。他們重複使用子滾動視圖,在scrollViewDidScroll:中分配丟失的圖像視圖。視頻可以幫助:
是實現從scrollViewDidEndDragging減速相關的代碼的解決方案:willDecelerate是爲你工作? – spd 2011-03-18 08:35:35