UIScrollView Infini Défilement

Que j'essaie de configurer un scrollview avec une infinie (horizontale) de défilement.

Défilement avant est facile j'ai mis en œuvre scrollViewDidScroll, et lorsque le contentOffset obtient près de la fin, je fais la scrollview contentsize plus grand et ajouter plus de données dans l'espace (je vais avoir à traiter avec l'effet paralysant ce sera plus tard!!!)

Mon problème est le défilement arrière - plan est à voir quand je suis près le début du défilement de la vue, puis quand je fais le contentsize de plus grand, de déplacer le contenu existant le long, ajouter les nouvelles données sur le début, et puis surtout régler le contentOffset de sorte que les données sous le point de vue de port reste le même.

Cela fonctionne parfaitement si je défiler lentement (ou activer la pagination), mais si je vais vite (même pas très vite!) il devient fou! Voici le 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);
}

Que le défilement se produit, le journal se lit comme suit:
1286.500000
1285.500000
1284.500000
1283.500000
1282.500000
1281.500000
1280.500000

Puis, quand pageNumber<4 (nous rapprochons le début):
4479.500000
4479.500000

Grand! - mais ces chiffres devraient continuer à descendre dans les 4000 s, mais la prochaine entrées de journal de lecture:
1278.000000
1277.000000
1276.500000
1275.500000
etc....

Continiuing à partir de là où il a laissé!

Juste pour le record, si défile lentement, le journal se lit comme suit:
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....

Des idées????

Grâce

Ben.

OriginalL'auteur Ben Robinson | 2010-08-07