0

スクロールビューをループするための良い解決策を見つけましたが、実際のページ番号を表示するために UIPageControl も使用しています。

スクロールビューがスクロールするときに pageControl.currentPage プロパティを変更するので、スクロールビューを半分以上スクロールすると、pageControl に新しいページが表示されます。この機能を維持したいのですが、実際のコードでは pageNumber が正しくありません。これを使用する必要があると思います: https://github.com/gblancogarcia/GBInfiniteScrollView しかし、それを機能させることはできません...

これが私のコードです:

-(void)rotateIfNecessary{
    if(scrollView.contentOffset.x == 0) {
        CGPoint newOffset = CGPointMake(scrollView.bounds.size.width+scrollView.contentOffset.x, scrollView.contentOffset.y);
        [scrollView setContentOffset:newOffset];
        [self rotateViewsRight];
    }
    else if(scrollView.contentOffset.x == (scrollView.contentSize.width - scrollView.frame.size.width) ) {
        CGPoint newOffset = CGPointMake(scrollView.contentOffset.x-scrollView.bounds.size.width, scrollView.contentOffset.y);
        [scrollView setContentOffset:newOffset];
        [self rotateViewsLeft];
    }
}

-(void)rotateViewsRight {
    NSMutableArray* controllers = [DashboardFrameUtil getFrameViewControllers];
    DashboardFrameViewController *endView = [controllers lastObject];
    [controllers removeLastObject];
    [controllers insertObject:endView atIndex:0];
    [self resizePages];
}

-(void)rotateViewsLeft {
    NSMutableArray* controllers = [DashboardFrameUtil getFrameViewControllers];
    DashboardFrameViewController *endView = [controllers firstObject];
    [controllers removeObjectAtIndex:0];
    [controllers addObject:endView];
    [self resizePages];
}

次にrotateIfNecessaryscrollViewDidEndDeceleratingすべて正常に動作しますが、ページが計算されます.. (スクロールビューのサイズが変更されるとscrollViewDidScroll、pageNumber を計算する場所が呼び出されます:

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

scrollView がループすると、pageControl は正しいページ番号を表示しません。何か案が?

前もって感謝します!

4

1 に答える 1