带页面控件的UIScrollView

时间:2013-05-31 21:43:02

标签: iphone ios6 uiscrollview uipagecontrol

在uiscrollview中使用三个不同的页面视图控制器作为视图。带有pagecontrol的UIScrollView仅显示第三页作为当前页面,但不显示另外两页。 Pagecontrol也不可见。

- (void)viewDidLoad
{
[super viewDidLoad];
PageOne *pageOne = [[PageOne alloc] init];

pageOne.view.frame = CGRectMake(0, 0, 320, 420);

PageTwo *pageTwo = [[PageTwo alloc]init];

pageTwo.view.frame = CGRectMake(0, 0, 320, 420);

PageThree *pageThree = [[PageThree alloc] init];

pageThree.view.frame = CGRectMake(0, 0, 320, 420);

scrollView = [[UIScrollView alloc] initWithFrame:CGRectMake(0, 0, self.view.frame.size.width, self.view.frame.size.height)]; 

[scrollView setContentSize:CGSizeMake(self.view.frame.size.width * 3, self.view.frame.size.height)]; 

[scrollView setDelegate:self]; 

[scrollView setPagingEnabled:YES]; 

[scrollView setShowsHorizontalScrollIndicator:YES]; 

[scrollView addSubview:pageOne.view];

[scrollView addSubview:pageTwo.view];

[scrollView addSubview:pageThree.view];

[self.view addSubview:scrollView];

_pageControl = [[UIPageControl alloc] init];

[_pageControl setCurrentPage:0]; 

[_pageControl setNumberOfPages:3]; 

[_pageControl sizeToFit]; 

[_pageControl setFrame:CGRectMake((scrollView.frame.size.width / 2) - (_pageControl.frame.size.width / 2), scrollView.frame.size.height - _pageControl.frame.size.height, _pageControl.frame.size.width, _pageControl.frame.size.height)]; 

[self.view addSubview:self.pageControl]; 


[super viewDidLoad];
}

 - (void)scrollViewDidScroll:(UIScrollView *)scrollView {

_pageControl.currentPage = lround(scrollView.contentOffset.x / scrollView.frame.size.width); 

}

现在它只显示pageThree。为什么不显示pageOne和pageTwo。

为什么不在页面中显示PageOne,pageTwo和pageThree。

感谢您的帮助。

2 个答案:

答案 0 :(得分:2)

您将contentOffset除以滚动视图的整个宽度而不是每个页面的宽度(我认为这会导致page1始终显示不是page3)。结果是page2的偏移量为320,scrollView的宽度为960,320 / 960为0.333

另外,因为您启用了分页,所以应该实现

- (void)scrollViewDidEndDecelerating:(UIScrollView *)scrollView

并将pageControl的currentPage设置在那里,这样你只会在每个页面的边缘调用它,而不是在它们之间的每个点(不需要舍入)。

尝试注释掉你的scrollViewDidScroll方法,而不是使用

- (void)scrollViewDidEndDecelerating:(UIScrollView *)scrollView
{
    [pageControl setCurrentPage:scrollView.contentOffset.x/320];
}

过去这一直对我有用。

答案 1 :(得分:1)

我的第一个答案解决了错误的问题......你只能看到第3页,因为所有三个页面都是相互叠加的。尝试:

第1页CGRectMake(0,0,320,420) 第2页CGRectMake(320,0,320,420) 第3页CGRectMake(640,0,320,420)

然后它们将在彼此相邻的滚动视图中而不是彼此重叠。