2011-06-10 12 views

Respuesta

34

tengo Usé esto antes y parecía funcionar bien. Asegúrese de establecer el UIScrollView.delegate en uno mismo.

#pragma mark - UIScrollViewDelegate methods 

- (void)scrollViewDidEndDecelerating:(UIScrollView *)sender { 
    uint page = sender.contentOffset.x/width; 
    [self.pageControl setCurrentPage:page]; 
} 
4

Cuando haya definido su UIScrollView y UIPageControl, usted tiene que poner en práctica este método:

- (void)scrollViewDidScroll:(UIScrollView *)_scrollView 
{ 
    if (pageControlIsChangingPage) 
     return; 

    CGFloat pageWidth = _scrollView.frame.size.width; 
    int page = floor((_scrollView.contentOffset.x - pageWidth/2)/pageWidth) + 1; 
    pageControl.currentPage = page; 
} 

y éste:

- (void)scrollViewDidEndDecelerating:(UIScrollView *)_scrollView 
{ 
    pageControlIsChangingPage = NO; 
} 

donde pageControlIsChangingPage es:

BOOL pageControlIsChangingPage; 
+1

Eso es lo que hice al principio, pero la respuesta de Picciano es más correcto: si manipula 'scrollViewDidEndDecelerating', no lo hace Obtenga "alertas falsas" mientras anima. –

2

Aquí es una actualización de esta respuesta para Swift, así:

func scrollViewDidEndDecelerating(scrollView: UIScrollView) { 
      pageControl.currentPage = Int(myScrollView.contentOffset.x)/Int(myScrollView.frame.width) 
     } 
Cuestiones relacionadas