2010-07-31 79 views
6

我试图使页面UIScrollView同时显示多个页面,实际上使页面大小小于UIScrollview的界限。我一直在Google上搜索几个小时,但似乎没有一个好的解决方案。UIScrollView具有多个页面可见或较小的页面大小

我能够通过施胶UIScrollview我想要一个页面是规模,关闭子视图的剪裁,并把它所有的水龙头传递到UIScrollview容器内视觉上得到正确的效果。问题在于,在Y页面可见的情况下,它可以让您将最后一页滚动到最左边,并在最后一页之后留下Y-1空页面。任何人都知道解决这个问题,或解决问题的另一种方法?

+0

当用户在您的页面上滑动时,是否想要滑动一个较小的值,然后scrollView的宽度?首先显示第1,2,3页,然后刷2,3,4?或者4,5,6会在刷卡后显示? – tonklon 2010-07-31 08:36:45

+0

我希望它像一个正常的滚动视图一样行动,滚动应该是手指移动的1:1,但是当手指被移除时它会锁定在页面上。 – Seventoes 2010-08-04 21:37:31

回答

6

对于右端,请尝试减小滚动视图的属性的宽度,以使滚动视图在到达最后一页之前停止分页。 对于左端,将每页的frame.origin.x属性减少相同的数量。前几页在滚动视图中会有一个负x位置。

本质上,使滚动视图认为它的内容只是第2页到第2页。

例如:

// scrollView has been initialized and added to the view hierarchy according to the link in @richard's answer: 
// http://blog.proculo.de/archives/180-Paging-enabled-UIScrollView-With-Previews.html 

CGFloat pageNum=10; 
CGFloat pageWidth=scrollView.frame.size.width; 
CGFloat pageHeight=scrollView.frame.size.height; 
CGFloat visibleWidth=320; 


// Set scrollView contentSize and create pages: 

CGFloat leftShift=floor(((visibleWidth-pageWidth)/2)/pageWidth)*pageWidth; 
CGFloat contentSizeReduction=2*leftShift; 

scrollView.contentSize = CGSizeMake(pageNum*pageWidth-contentSizeReduction,pageHeight); 

for(int i=0; i<pageNum; i++) { 
    CGRect pageFrame = CGRectMake(i*pageWidth-leftShift, 0, pageWidth, pageHeight); 
    UIView *pageView = [[[UIView alloc] initWithFrame:pageFrame] autorelease]; 

    // Initialize the page view for the current index here 

    [scrollView addSubview:pageView]; 
} 

原谅代码中的任何拼写错误。我自己还没有尝试过。

让我知道它是否有效。

7

我认为你需要类似safari移动浏览器中的预览。这是一个带有一些示例代码的网站。 Preview Sample Code