我找到了一个循环滚动视图的好方法,但是我也使用UIPageControl来显示实际页面的编号。
当scrollview滚动时,我更改了pageControl.currentPage属性,因此,如果滚动scrollview超过一半,则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没有显示正确的页码。任何的想法?
先感谢您!
让我们开始:
if(scrollView.contentOffset.x == 0) {
CGPoint newOffset = CGPointMake(scrollView.bounds.size.width+scrollView.contentOffset.x, scrollView.contentOffset.y);
...
}
当scrollView.contentOffset.x == 0时,条件为true,那么,为什么要向scrollView.bounds.size.width添加scrollView.contentOffset.x(肯定为0)?
我没有运行代码-可能会出现一些错误
例如,如果您对我正确理解,请向右旋转-最后一个元素成为第一个元素,并且希望显示LAST页面?
如果是-页面的问题是因为您一直在更改contentOffset并还更改滚动视图的``数据源'',所以contentOffset与各个DashboardFrameViewController之间没有关联-同一DashboardFrameViewController在不同的时刻可以处于不同的偏移量。因此,您必须根据其他内容来计算第N页。
例如:
在ivar中的某个位置存储初始控制器(具有初始顺序):
- (void)viewDidLoad {
[super viewDidLoad];
_initialControllers = [[DashboardFrameUtil getFrameViewControllers] copy];
}
那么您需要某种方法来发现当前可见的vc或最接近中心的vc(并将其存储在ivar _currentlyVissibleVC中),例如:
- (DashboardFrameViewController *)vissibleVC {
for (DashboardFrameViewController *vc in _initialControllers){
if (CGRectContainsPoint(vc.frame, CGPointMake(scrollView.contentOffset.x + scrollView.bounds.size.width/2, scrollView.contentOffset)){
_currentlyVissibleVC = vc;
return;
}
}
}
那么您可以计算页数:
int pageN = [_initialControllers indexOfObject:_currentlyVissibleVC] + 1;
希望有所帮助
本文收集自互联网,转载请注明来源。
如有侵权,请联系 [email protected] 删除。
我来说两句