objective-c - UIScrollView 防止向一个方向滚动,而不管 contentSize/Offset

标签 objective-c ios uiscrollview uiswipegesturerecognizer

我有一个启用了分页的 UIScrollView,但在某些情况下我希望能够阻止用户滑动到下一页或返回上一页。

例如,某人可能通过了包含 10 个问题(每页一个问题)的测试,但除非此人已回答当前页面的问题,否则滚动将不起作用。

这也可能是为了防止他们滑回上一页。所以基本上我不能使用方向锁定或暂时禁用用户交互,因为可以允许读者向左滑动但不能向右滑动。

我注意到一些人在玩弄内容偏移量,但我发现该解决方案很丑陋,因为用户仍然可以滑动,只是应用会自动重新调整内容偏移量。我希望它好像 View 已经到达内容的末尾或者用户交互被禁用。

我想我也许可以“玩”内容大小/偏移量并在每一页上刷新它,但我不确定如何正确地做到这一点,因为我也有“链接”可以让某人从一个页面跳到另一个(当时可能超出定义的内容)。

我已经尝试为在特定方向上滑动被锁定的页面使用自定义 View ,但它不起作用,因为我找不到一种方法来防止 ScrollView 检测滑动而不影响页面滑动应该工作一个正常的方式。我看到我可以将该自定义 View 的 exclusiveTouch 属性设置为 YES 并假设因为它将获得所有事件我可以通过自定义手势识别器处理滑动并在允许滑动时转发事件或者如果不允许则忽略它们。它不起作用,ScrollView 总是捕获滑动事件。

我觉得我已经用尽了所有的可能性,我找不到任何有类似需求的人。

所以我想知道,这可能吗?如果是,是否需要糟糕的黑客攻击或制作新的自定义 ScrollView ?

任何帮助/想法将不胜感激。

最佳答案

在您希望锁定滚动/分页的代码中的适当位置使用您的条件,并将您的 scrollView 对象的 pagingEnabled 或 scrollEnabled 设置为 NO。

编辑:

应该更仔细地阅读您的要求。根据您的需要,更好的解决方案是根据您的条件使用多个 View 从侧面滑入和滑出。动画他们。手势识别器也应该有所帮助。我这里说的不是 scrollView。 View1 -> 条件 -> 通过? (按钮 Action 或手势)-> 动画进入 view2 等等。

如果你真的必须使用 scrollView,你能做的最好的就是将 contentSize 设置为屏幕的宽度,并将 alwaysBounceHorizo​​ntal 设置为 NO 以防止自动弹跳效果:

CGRect size = scrollView.contentSize;
size.width = CGRectGetWidth(scrollView.frame);
scrollView.contentSize = size;
scrollView.alwaysBounceHorizontal = NO;

关于objective-c - UIScrollView 防止向一个方向滚动,而不管 contentSize/Offset,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7584983/

相关文章:

objective-c - iOS核心数据: When is data recreatable?

ios - 如何通过 NSString 访问对象?

objective-c - 如何在iphone sdk 上播放ustream 的视频?

android - 将 ios 应用程序移植到 android

ios - "automatically adjusts font requires using a dynamic type text style"警告是什么意思?

ios - Cloudkit 返回带有特定字符串的记录

ios - 圆角 View 在 iOS 9 中不起作用

ios - 2 在 ScrollView 中使用其他手势进行手指平移 - iOS SDK

ios - 将 Xib 与 ScrollView 一起使用 - Swift

ios - View 不粘在顶部(不改变位置)