禁用 UIPageViewController 反弹

2023-11-25

对此进行了很多搜索,但尚未找到合适的解决方案。

是否可以禁用弹跳效果UIPageViewController并且仍然使用UIPageViewControllerTransitionStyleScroll?


禁用 UIPageViewController 的反弹

  1. Add the <UIScrollViewDelegate>委托给 UIPageViewController 的标头

  2. 将 UIPageViewController 的底层 UIScrollView 的委托设置为其父级viewDidLoad:

    for (UIView *view in self.view.subviews) {
        if ([view isKindOfClass:[UIScrollView class]]) {
            ((UIScrollView *)view).delegate = self;
            break;
        }
    }
    
  3. 实施为滚动视图是否滚动是将 contentOffset 重置为原点(不是 (0,0),而是 (bound.size.width, 0))当用户超出范围时,如下所示:

    - (void)scrollViewDidScroll:(UIScrollView *)scrollView {
        if (_currentPage == 0 && scrollView.contentOffset.x < scrollView.bounds.size.width) {
            scrollView.contentOffset = CGPointMake(scrollView.bounds.size.width, 0);
        } else if (_currentPage == totalViewControllersInPageController-1 && scrollView.contentOffset.x > scrollView.bounds.size.width) {
            scrollView.contentOffset = CGPointMake(scrollView.bounds.size.width, 0);
        }
    }
    
  4. 最后,实现为滚动视图将结束拖动是为了处理一个bug场景,当用户在第一页从左向右快速滑动时,第一页不会向左弹起(由于上面的功能),而是会由于(可能是)滑动的速度。最后,当弹回来时,UIPageViewController 将触发页面翻转到第二页(这当然不是预期的)。

    - (void)scrollViewWillEndDragging:(UIScrollView *)scrollView withVelocity:(CGPoint)velocity targetContentOffset:(inout CGPoint *)targetContentOffset {
        if (_currentPage == 0 && scrollView.contentOffset.x <= scrollView.bounds.size.width) {
            *targetContentOffset = CGPointMake(scrollView.bounds.size.width, 0);
        } else if (_currentPage == totalViewControllersInPageController-1 && scrollView.contentOffset.x >= scrollView.bounds.size.width) {
            *targetContentOffset = CGPointMake(scrollView.bounds.size.width, 0);
        }
    }
    

斯威夫特4.0

要放入的代码viewDidLoad:

for subview in self.view.subviews {
    if let scrollView = subview as? UIScrollView {
        scrollView.delegate = self
        break;
    }
}

实施滚动视图是否滚动:

func scrollViewDidScroll(_ scrollView: UIScrollView) {
    if (currentPage == 0 && scrollView.contentOffset.x < scrollView.bounds.size.width) {
        scrollView.contentOffset = CGPoint(x: scrollView.bounds.size.width, y: 0);
    } else if (currentPage == totalViewControllersInPageController - 1 && scrollView.contentOffset.x > scrollView.bounds.size.width) {
        scrollView.contentOffset = CGPoint(x: scrollView.bounds.size.width, y: 0);
    }
}

实施滚动视图将结束拖动:

func scrollViewWillEndDragging(_ scrollView: UIScrollView, withVelocity velocity: CGPoint, targetContentOffset: UnsafeMutablePointer<CGPoint>) {
    if (currentPage == 0 && scrollView.contentOffset.x <= scrollView.bounds.size.width) {
        targetContentOffset.pointee = CGPoint(x: scrollView.bounds.size.width, y: 0);
    } else if (currentPage == totalViewControllersInPageController - 1 && scrollView.contentOffset.x >= scrollView.bounds.size.width) {
        targetContentOffset.pointee = CGPoint(x: scrollView.bounds.size.width, y: 0);
    }
}
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

禁用 UIPageViewController 反弹 的相关文章

随机推荐

  • 如何在 Winforms 文本框中允许使用 CTRL-V(粘贴)?

    我在 Windows 窗体上有几个文本框 我无法使用 CTRL V 将文本粘贴到其中任何一个中 但我仍然可以右键单击并选择粘贴 这很烦人 我已经尝试过将表单的 KeyPreview 设置为 true 和 false TextBox Shor
  • 如何在rails控制台(或irb)中输入多字节字符?

    伙计们 我正在用rails开发一个中文应用程序 现在我想在rails控制台中输入一些汉字 但在irb中都无法做到这一点 有哪位大佬有解决这个问题的经验吗 我将感谢您的帮助 根据 Jimmy Huang 的回答 这些是我在 Mac Leopa
  • MongoDB 可以打包在 Electron 应用程序中吗?

    我可以将 MongoDB 打包在 Electron 应用程序中 这样我就不需要将其安装在客户端计算机上吗 我正在 OSX 上开发一个应用程序 它可能会在 Windows 上使用 需要在客户端单独安装Mongo吗 是的 我过去曾使用过这种方法
  • iPhone 应用程序的 WhatsApp url 方案

    我们正在开发一款 iPhone 应用程序并计划集成 Whatsapp 有没有办法从 iPhone 应用程序启用点击通话 消息 Skype 通过以下方式允许这样做 a href Skype a Whatsapp 是否有同等功能 目前 What
  • ggplot 图例中重叠的形状和字符

    当我用相同的颜色绘制点和文本时 a和图例中的形状重叠 我可以告诉 ggplot 不要绘制a传说中 如何 M lt data frame t letters 1 16 xx runif 16 yy runif 16 g rep c A B C
  • 使用 QMAKE 构建 32 位和 64 位版本的项目

    我需要生成应用程序的 32 位版本 但我正在 64 位操作系统上进行编译 我正在寻找一种方法让 QMake 生成我的应用程序的 32 位和 64 位版本 如果这不可能 我想知道如何切换到 32 位 我还想避免弄乱生成的 makefile 使
  • 为什么 subprocess.Popen 不等到子进程终止?

    我对 Python 的 subprocess Popen 方法有疑问 这是一个演示该问题的测试脚本 它正在 Linux 机器上运行 usr bin env python import subprocess import time def r
  • 输入时可编辑内容段落标签

    我想知道是否有一种可接受的方法来强制所有主要浏览器插入段落标签 而不是当 contentEditable 为 true 时按 Enter 键时插入的默认标签 据我所知IE会自动插入p 但 Google Chrome 会插入 div 标签 而
  • grails 中特定于环境的 web.xml?

    构建特定环境的最佳方法是什么web xmlgrails 中的条目 我只需要对生产进行某些修改 因为它们会中断本地运行 有什么想法吗 您可以创建scripts Events groovy带有 WebXmlEnd 事件的事件处理程序 一旦 Gr
  • 在 JBoss AS 7 中设置 SSL

    我正在尝试在 JBoss Application Server 7 中设置 SSL 我想要 http 和 https 所以我添加了
  • java中的final变量和synchronized块

    Java中的final变量是什么 例如 如果我写final int temp 函数中final关键字的含义是什么 另外 我什么时候想使用final变量 既作为类变量又作为函数变量 为什么同步块中的变量必须声明为final Final 变量和
  • Alpine 3.3、Python 2.7.11、urllib2 导致 SSL:CERTIFICATE_VERIFY_FAILED

    我有这个小 Dockerfile FROM alpine 3 3 RUN apk update add python CMD python c import urllib2 response urllib2 urlopen https ww
  • 动态添加 TabItem

    我有一个TabControl控制
  • jQuery 替换 Word 中的空格

    我有一个select在我的页面上value of Test One
  • Java:计算返回错误答案? [复制]

    这个问题在这里已经有答案了 可能的重复 在java中使用双精度数保持精度 以双精度数移动小数位 例如 像这样简单的事情 public class WrongAnswer public static void main String args
  • 如何在预处理时可靠地检测 clang 的版本?

    显然 与 Xcode 捆绑的 clang 不尊重上游 clang major and clang minor 值 而是报告某种面向用户的 Xcode 版本 以下是 clang 的各种 MacPorts 安装的值 仅供参考 他们似乎尊重上游版
  • NUnit,针对多种文化进行测试

    我希望使用 NUnit 针对多种文化运行某个项目中的所有测试 该项目处理应该是文化中立的解析数据 为了确保这一点 我想针对多种文化运行每个测试 我目前的解决方案是 public abstract class FooTests tests g
  • pandas 自动将我的字符串列转换为浮点数

    我该怎么做才能防止 pandas 将我的字符串值转换为浮点数 专栏Billing Doc and Sales Order包含 10 11 位数字 这些数字将存储在 MySQL 表中数据类型为 CHAR 15 的列内 当我执行以下脚本时 我看
  • 为什么在 /proc/kcore 中使用 gdb 时,我的 vmlinux 中没有调试符号?

    我已经全部配置完毕CONFIG DEBUG 相关选项y 但是当我尝试调试内核时 它说找不到调试符号 gdb usr src linux 2 6 32 9 vmlinux proc kcore Reading symbols from usr
  • 禁用 UIPageViewController 反弹

    对此进行了很多搜索 但尚未找到合适的解决方案 是否可以禁用弹跳效果UIPageViewController并且仍然使用UIPageViewControllerTransitionStyleScroll 禁用 UIPageViewContro