スクロールビューをループするための良い解決策を見つけましたが、実際のページ番号を表示するために 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];
}
次にrotateIfNecessary
、scrollViewDidEndDecelerating
すべて正常に動作しますが、ページが計算されます.. (スクロールビューのサイズが変更されるとscrollViewDidScroll
、pageNumber を計算する場所が呼び出されます:
CGFloat pageWidth = scrollView.frame.size.width;
int page = floor((scrollView.contentOffset.x - pageWidth / 2) / pageWidth) + 1;
pageControl.currentPage = page;
scrollView がループすると、pageControl は正しいページ番号を表示しません。何か案が?
前もって感謝します!