Iphone UIScrollView-启用分页后,我可以;更改“;页面宽度?

Iphone UIScrollView-启用分页后,我可以;更改“;页面宽度?,iphone,cocoa-touch,uiscrollview,Iphone,Cocoa Touch,Uiscrollview,让滚动视图(PaginEnabled设置为YES)将页面宽度设置为滚动视图边界以外的值的最简单方法是什么 让我举个例子。假设我有一个10个项目的滚动视图,每个项目150像素宽,我的滚动视图300像素宽。如果我从视图1和2可见开始并水平向右滚动,我希望下一个“页面”显示项目2和3。如果我再向右滚动一页,我会看到第3项和第4项 有人这样做过吗?如果没有,你会采取什么策略?亚历山大·雷皮刚刚在博客中谈到了这个话题:。简短回答:这并不像改变“页面”的宽度那么简单,但也不是太难 使用Ben链接到的我博客中

让滚动视图(PaginEnabled设置为YES)将页面宽度设置为滚动视图边界以外的值的最简单方法是什么

让我举个例子。假设我有一个10个项目的滚动视图,每个项目150像素宽,我的滚动视图300像素宽。如果我从视图1和2可见开始并水平向右滚动,我希望下一个“页面”显示项目2和3。如果我再向右滚动一页,我会看到第3项和第4项


有人这样做过吗?如果没有,你会采取什么策略?

亚历山大·雷皮刚刚在博客中谈到了这个话题:。简短回答:这并不像改变“页面”的宽度那么简单,但也不是太难

使用Ben链接到的我博客中的方法。使UIScrollView的大小为周围视图的一半(即150px),并将其向左移动,而不是使其居中

这会让你表现出你想要的行为

干杯,
Alex

当然可以借助于滚动视图委托方法内容偏移来完成

下面是相同的详细代码

int start;

int end;

int k=0;

- (void)scrollViewWillBeginDragging:(UIScrollView *)scrollView1
{

    pageControlUsed = NO;

    start = scrollView.contentOffset.x;

}

- (void)scrollViewDidEndDragging:(UIScrollView *)scrollView1 willDecelerate:(BOOL)decelerate
{

    end = scrollView.contentOffset.x;

}   


- (void)scrollViewWillBeginDecelerating:(UIScrollView *)scrollView1{

    int diff = end-start;

        if (diff>0)
        {

         k=k+150;
         [scrollView setContentOffset:CGPointMake(k, 0) animated:YES];

        }
       else {

         k=k-150;
        [scrollView setContentOffset:CGPointMake(k, 0) animated:YES];

          }
}

只需覆盖ScrollViewWillendDraging

- (void)scrollViewWillEndDragging:(UIScrollView *)scrollView withVelocity:(CGPoint)velocity targetContentOffset:(inout CGPoint *)targetContentOffset {
    CGFloat pageWidth = 160;
    targetContentOffset->x = pageWidth * (int)(targetContentOffset->x / pageWidth);
}

这在iOS 7.1~8.2上运行良好

我在其他地方看到过这种方法,并尝试过,但不幸的是,我认为它没有达到我想要的效果。我需要的不仅仅是看到周围项目的边缘,在我的情况下,我需要有两个项目完全在屏幕上。不幸的是,这种方法对我来说效果不太好,尤其是在最左边/最右边的边缘。只需将scrollview设置为150px宽,但关闭剪辑。把整个东西放在一个300像素宽的视图中,然后打开剪辑。谢谢,本。正如我在对Alexander答案的评论中提到的,这肯定让我走上了正确的道路。一定要记下“digdog”在博客帖子上的评论,以确保它在你有需要交互的子视图时能正常工作。更多关于覆盖命中测试方法的信息:它不是那么简单,但我相信我已经弄明白了。你的帖子当然有帮助-谢谢!这种方法的一个问题是,只有当您按下滚动视图的一半时,滚动才起作用。@ChaseRoberts您可以调整点击测试来说明这一点:
UIScrollView *album = [[UIScrollView alloc] init];
album.translatesAutoresizingMaskIntoConstraints = NO;
album.pagingEnabled = YES;
album.clipsToBounds = NO;
album.showsHorizontalScrollIndicator = NO;
album.contentInset = UIEdgeInsetsMake(0, -50, 0, -50);
[view addSubview:album];


[view addConstraints:[NSLayoutConstraint constraintsWithVisualFormat:@"H:|-50-[_album(220)]" options:0 metrics:metrics views:views]];

[view addConstraints:[NSLayoutConstraint constraintsWithVisualFormat:@"V:|[_album(300)]" options:0 metrics:metrics views:views]];