Mi aplicación llama a scrollViewDidScroll 19 veces

Tengo una aplicación basada en la muestra de PageControl de Apple. La primera vez que se carga la vista, la vista de desplazamiento se carga con la página 0 y la página 1. Cada vez que se inicia un desplazamiento, UIKit debe llamar al método scrollViewDidScroll ¿correcto?

Al iniciar un desplazamiento desde la página 0 a la página 1, la aplicación debe cargar la página 1, la página y la página + 1 (para evitar destellos durante el desplazamiento).

Mi aplicación parece llamarscrollViewDidScroll 19 veces y miloadScrollViewWithPage: método 19 veces cada una con la página 0 y la página 1, antes de que finalmente llegue a las páginas 1 y 2, se bloquea.

Estos son los métodos:

- (void)scrollViewDidScroll:(UIScrollView *)sender {
    NSLog(@"scrollviewdidscroll");
   // We don't want a "feedback loop" between the UIPageControl and the scroll delegate in
   // which a scroll event generated from the user hitting the page control triggers updates from
   // the delegate method. We use a boolean to disable the delegate logic when the page control is used.
   if (pageControlUsed) {
        // do nothing - the scroll was initiated from the page control, not the user dragging
       return;
   }

   // Switch the indicator when more than 50% of the previous/next page is visible
   CGFloat pageWidth = scrollView.frame.size.width;
   int page = floor((scrollView.contentOffset.x - pageWidth / 2) / pageWidth) + 1;
   pageControl.currentPage = page;

   // load the visible page and the page on either side of it (to avoid flashes when the user starts scrolling)
   [self loadScrollViewWithPage:page - 1];
   [self loadScrollViewWithPage:page];
   [self loadScrollViewWithPage:page + 1];

   // A possible optimization would be to unload the views+controllers which are no longer visible
}

- (void)loadScrollViewWithPage:(int)page {
    if (page < 0) return;
    if (page >= kNumberOfPages) return;

    NSLog(@"page: %i", page);

    // replace the placeholder if necessary
    KeyboardViewController *controller = [viewControllers objectAtIndex:page];
    if ((NSNull *)controller == [NSNull null]) {
        controller = [[KeyboardViewController alloc] initWithPageNumber:page];
        [viewControllers replaceObjectAtIndex:page withObject:controller];
        [controller release];
    }

    // add the controller's view to the scroll view
    CGRect frame = scrollView.frame;
    frame.origin.x = frame.size.width * page;
    frame.origin.y = 0;
    frame.size.height = scrollView.frame.size.height;
    controller.view.frame = frame;
    [scrollView setAutoresizesSubviews:YES];
    [scrollView setAutoresizingMask:UIViewAutoresizingFlexibleWidth|UIViewAutoresizingFlexibleHeight];
    [scrollView addSubview:controller.view];
}

¿Por qué se llamaría scrollViewDidScroll tantas veces?

Gracias

Respuestas a la pregunta(1)

Su respuesta a la pregunta