0

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

- (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。

感谢帮助。

4

2 回答 2

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];
}

这在过去一直对我有用。

于 2013-05-31T22:32:53.040 回答
1

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

page1 CGRectMake(0,0,320,420) page2 CGRectMake(320,0,320,420) page3 CGRectMake(640,0,320,420)

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

于 2013-05-31T22:57:32.420 回答