【问题标题】:Restricting UIScrollView scrolling to only one page at a time限制 UIScrollView 一次只能滚动到一页
【发布时间】:2012-09-27 16:41:32
【问题描述】:

我想将UIScrollView 限制为一次只能滚动一页。

换句话说,即使用户快速滑动,我也希望将UIScrollView 限制为仅滚动一页。

有什么好办法吗?

【问题讨论】:

    标签: objective-c ios uiscrollview uikit uiscrollviewdelegate


    【解决方案1】:
    UIScrollView *myScrollView;
    ...
    
    myScrollView.pagingEnabled = YES;
    

    当设置为 YES 时,滚动视图在滚动视图的倍数处停止。

    【讨论】:

    • 我确实启用了分页,并且滚动视图总是在页面上停止。但是,通过足够快的滑动,可以一次滚动两个或更多页面。这就是我想要阻止的。
    • 嗯,你确实写过你想限制一次滚动到一页。看你的问题。您可以将您的界限安排为 = 您定义为“页面”的任何内容,看看是否能达到您想要的效果。否则您将不得不自己管理。
    • 是的,到目前为止,这似乎是唯一的解决方案。
    • 您将不得不做一些事情,例如获取滑动手势,如果它是在您支持的任何方向上滑动,则使用 -(void)scrollRectToVisible:(CGRect)rect animated:(BOOL)animated
    • 嗯,这似乎是个好主意。这样我就可以完全控制用户交互。
    【解决方案2】:

    如果您尚未确定滚动视图,实现此目的的一种方法是使用UIPageViewController。我正在查看我的应用程序中的一个,此功能似乎是免费提供的。

    使用 UIScrollView,我想您可能想要响应 UIScrollViewDelegate 方法 - (void)scrollViewWillEndDragging:(UIScrollView *)scrollView withVelocity:(CGPoint)velocity targetContentOffset:(inout CGPoint *)targetContentOffset

    我在想您可以将当前的“页面”保存在一个属性中,然后在scrollViewWillEndDragging:withVelocity:targetContentOffset: 方法中您可以将目标内容偏移量修改为仅是下一页/上一页。

    有一个 2012 WWDC 视频,Enhancing User Experience with Scroll Views,如果您想看到它的实际效果,它使用了这种方法。

    【讨论】:

    • 我不确定是否使用UIPageViewController,但你引用的那个方法肯定有用。
    • 无论出于何种原因,启用分页时都不会调用您引用的方法(根据苹果文档)。太糟糕了,因为它可能有效。
    • 哦,哎呀没有意识到这一点。你可以做的是将pagingEnabled设置为NO,然后使用上述方法自己创建效果。
    猜你喜欢
    • 1970-01-01
    • 2012-06-15
    • 1970-01-01
    • 2023-03-15
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-06-29
    相关资源
    最近更新 更多