Ich versuche, eine Scrollview mit unendlichen (horizontalen) Scrollen einzurichten.UIScrollView Infinite Scrolling
Scrollen nach vorne ist einfach - ich habe scrollViewDidScroll implementiert, und wenn der contentOffset fast das Ende erreicht, mache ich die scrollview-Inhaltsgröße größer und füge weitere Daten in den Raum ein (ich muss mich mit dem lähmenden Effekt befassen, den das später haben wird) !)
Mein Problem ist das Zurückscrollen - der Plan ist zu sehen, wenn ich in die Nähe des Anfanges der Bildlaufansicht komme, wenn ich die Inhaltsgröße größer mache, den vorhandenen Inhalt mitnehme, die neuen Daten am Anfang hinzufügen und dann - stellen Sie den contentOffset so ein, dass die Daten unter dem View-Port gleich bleiben.
Dies funktioniert perfekt, wenn ich langsam blättern (oder Paging aktivieren), aber wenn ich schnell gehe (nicht einmal sehr schnell!) Wird es verrückt! Heres der Code:
- (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);
}
Wie das Scrollen das Protokoll geschieht liest: 1286,500000 1285,500000 1284,500000 1283,500000 1282,500000 1281,500000 1280,500000
Dann, wenn Seitennummer < 4 (wir bekommen in der Nähe der Anfang): 4479.500000 4479.500000
Gr Essen! - aber die Zahlen sollten weiterhin in der 4,000s gehen, aber die nächsten Log-Einträge lesen: 1278,000000 1277,000000 1276,500000 1275,500000 etc ....
Continiuing von wo es aufgehört!
Nur für das Protokoll, wenn gescrollt langsam das Protokoll liest: 1294,500000 1290,000000 1284,500000 1280,500000 4476,000000 4476,000000 4473,000000 4470,000000 4467,500000 4464,000000 4460,500000 4457,500000 etc ....
Irgendwelche Ideen????
Dank
Ben.
Seien Sie vorsichtig, Scrollen, so scheint es 'setContentOffset: animierte:' aktuelle Scrollen annulliert, aber nicht 'setContentOffset:' ... Aufschalten 'setContentOffset:' in einem Nachkommen von ' UIScrollView' und Tweaking Offset funktioniert (zumindest auf iOS SDK 4.3). –
Ich habe festgestellt, dass sowohl setContentOffset: animated: und setContentOffset: die Scrolling-Animation (iPad2 SDK 4.3) leider abbrechen. –