首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >更改UIScrollView中的页数

更改UIScrollView中的页数
EN

Stack Overflow用户
提问于 2015-07-27 17:41:42
回答 1查看 709关注 0票数 1

我使用的是一个UIScrollView,它有几个需要显示的项。当第一次加载时,我的第一个项目以UIScrollView中间为中心。我试图让下一项,第二项,部分显示,允许用户知道有更多的项目需要看到,从而导致他们滚动的项目。

我要做的是配置它,这样用户就可以在UIScrollView允许的情况下自由地滑动和滚动,但是每次用户滑动时,我都希望UISCrollView自动停止在最接近视图中心的任何项目上。

我已经启用了分页,并了解了分页的工作原理。我想要做的是使它能够改变--分页所创建的“固定页面点”的数量。在启用分页的情况下,它似乎将视图的总宽度除以2,从而创建了3个停止点:一个位于视图左侧的视图末尾,一个位于视图的直接中心(视图宽度/2 ),另一个位于视图的最右端。

如果有人知道如何更改停止点的数量,或页面点(CGPoints),无论它们被称为什么,我都会非常感激。下面是我正在努力实现的目标的图片。

  1. 视图以中间的第一项为中心加载。
  2. 用户已经向右滚动,并停止了第2项,该项现在显示在屏幕的中心。
  3. 用户再次向右滚动,项目3现在居中。

EN

回答 1

Stack Overflow用户

发布于 2015-07-27 17:58:54

不幸的是,UIScrollView分页没有按照您希望的方式工作。

分页尽可能多地创建UIScrollView在内容大小范围内的界限。例如,如果滚动视图的帧大小为200x200,而内容为400x200,它将创建两个水平页面。如果是600x200,它将创建三个水平页面,以此类推。

这意味着,您将无法以这样一种方式页面,您可以看到其他的元素。

为了做到这一点,我建议重写这个方法:

代码语言:javascript
复制
- (void)scrollViewWillEndDragging:(UIScrollView *)scrollView withVelocity:(CGPoint)velocity targetContentOffset:(inout CGPoint *)targetContentOffset

下面是一个与完全分页相同的效果的示例。我会使用元素大小的targetOffset线来使其全部正常工作。

代码语言:javascript
复制
- (void)scrollViewWillEndDragging:(UIScrollView *)scrollView withVelocity:(CGPoint)velocity targetContentOffset:(inout CGPoint *)targetContentOffset {

    float expectedOffset = targetContentOffset->x;
    if (expectedOffset == 0 || expectedOffset == scrollView.contentSize.width)
        return;
    CGFloat targetOffset = roundf(expectedOffset / scrollView.frame.size.width) * scrollView.frame.size.width;

    targetContentOffset->x = targetOffset;
}
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/31659743

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档