我試圖設置無限(水平)滾動滾動視圖。滾動向前很容易 - 我已經實現了scrollViewDidScroll,並且當contentOffset接近結束時,我將scrollview內容做得更大,並將更多數據添加到空間中(我將不得不處理稍後會有的殘缺效果) !)UIScrollView無限滾動
我的問題是滾動回來 - 計劃是看我什麼時候接近滾動視圖的開始,然後當我確定內容更大時,將現有內容一起移動,將新數據添加到開始處然後 - 重要的是調整contentOffset,以便視圖端口下的數據保持不變。
如果我慢慢地滾動(或啓用分頁),但是如果我快速地(甚至不是非常快!)它會變得瘋狂!繼承人的代碼:
- (void) scrollViewDidScroll:(UIScrollView *)scrollView {
float pageNumber = scrollView.contentOffset.x/320;
float pageCount = scrollView.contentSize.width/320;
if (pageNumber > pageCount-4) {
//Add 10 new pages to end
mainScrollView.contentSize = CGSizeMake(mainScrollView.contentSize.width + 3200, mainScrollView.contentSize.height);
//add new data here at (320*pageCount, 0);
}
//*** the problem is here - I use updatingScrollingContent to make sure its only called once (for accurate testing!)
if (pageNumber < 4 && !updatingScrollingContent) {
updatingScrollingContent = YES;
mainScrollView.contentSize = CGSizeMake(mainScrollView.contentSize.width + 3200, mainScrollView.contentSize.height);
mainScrollView.contentOffset = CGPointMake(mainScrollView.contentOffset.x + 3200, 0);
for (UIView *view in [mainContainerView subviews]) {
view.frame = CGRectMake(view.frame.origin.x+3200, view.frame.origin.y, view.frame.size.width, view.frame.size.height);
}
//add new data here at (0, 0);
}
//** MY CHECK!
NSLog(@"%f", mainScrollView.contentOffset.x);
}
由於滾動發生在日誌上寫着: 1286.500000 1285.500000 1284.500000 1283.500000 1282.500000 1281.500000 1280.500000
然後,當PAGENUMBER < 4(我們正在接近獲得開頭): 4479.500000 4479.500000
Gr吃! - 但數字應該繼續往下走的4,000秒,但接下來的日誌條目閱讀: 1278.000000 1277.000000 1276.500000 1275.500000 等....
從那裏離開Continiuing!
只是爲了記錄在案,如果慢慢地滾動日誌上寫着: 1294.500000 1290.000000 1284.500000 1280.500000 4476.000000 4476.000000 4473.000000 4470.000000 4467.500000 4464.000000 4460.500000 4457.500000 等....
有任何想法嗎????
謝謝
本。
小心,似乎'setContentOffset:動畫:'取消當前的滾動,而不是'setContentOffset:'...'重寫setContentOffset:在''的後裔UIScrollView'並調整偏移量(至少在iOS SDK 4.3上)。 – 2011-06-30 08:33:36
我注意到setContentOffset:animated:和setContentOffset:不幸地取消了滾動動畫(iPad2 SDK 4.3)。 – 2011-10-03 12:28:23