禁用 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 反弹 的相关文章

  • 从一个模态视图无缝翻转到另一个模态视图,而不显示纯色背景

    我的 iPad 应用程序的 UI 如下 当我点击Settings按钮 我希望对话框水平翻转以显示设置对话框 我这个工作正常 但是 当对话翻转时会显示背景颜色 如你看到的 有什么办法可以让对话框翻转时不显示该颜色块吗 我希望它看起来更加无缝
  • 生成具有固定数字长度的随机数?

    我正在生成随机数 int randomID arc4random 3000 但我想生成至少 4 位数字的随机数 如 1000 2400 1122 我想知道 Objective C 的代码 请尝试 生成数字 1000 9999 int ran
  • 从按钮执行 Segue 时应用程序冻结

    我的故事板中有一个按钮 它呈现一个带有模式序列的视图控制器 每次按下此按钮时 应用程序都会冻结 没有崩溃 也没有错误消息 prepareForSegue被调用 所有应该存在的视图控制器都在代码中prepareForSegue 但它们不会出现
  • 为什么 iOS 启动屏幕很慢?

    我的 iOS 应用程序启动屏幕大约需要 3 5 秒 我有一张将在启动屏幕后加载的地图 我的用户必须等待启动屏幕加载 然后再等待 3 秒才能加载地图 有没有办法最大限度地减少启动屏幕时间 基本上这种延迟意味着you在启动过程中做了一些非常错误
  • 使用未解析的标识符“FlurryAdInterstitial”

    我正在尝试整合Flurry Interstitial Ads使用cocoapods in Swift and Xcode 7 1 1 我正在关注开发人员雅虎网站上的此文档 https developer yahoo com flurry d
  • AVAssetExportSession 无法导出从 iCloud 下载的视频

    我正在尝试创建从用户相册中选择的视频的缩小版本 输出的最大尺寸为 720p 因此 在检索视频时 我使用 mediumQualityFormat as the deliveryMode 如果用户设备中不存在原始视频或其中等质量版本 这会导致
  • UIViewControllerAnimatedTransitioning:旋转更改后黑屏片段

    我已经创建了一个视图控制器转换 只要我不更改设备方向 一切都正常 图 1 显示了应有的屏幕 然后我切换到下一个视图控制器 在其中更改方向 现在我回到第一个视图控制器并再次切换方向 然后我得到的结果如图 2 所示 出现黑色边框 请不要介意屏幕
  • ReactiveCocoa 将 SignalProducers 合二为一

    我正在使用 ReactiveCocoa 并且我有几个 SignalProducers let center NSNotificationCenter defaultCenter let signalProducer1 center rac
  • 贴纸包会在模拟器上使 iMessage 崩溃,但在 iPhone 上不会崩溃

    按照 Apple 的在线说明和视频在 Xcode 中创建了一个贴纸包 所有图像的尺寸均正确且远低于文件大小阈值 如果我在我的实体 iPhone 上构建并运行贴纸包 一切都会完美运行 如果我在模拟器上构建并运行贴纸包 对于任何模拟的 iPho
  • “预期的 ';'在 Swift 下的顶级声明符之后”

    我正在尝试将所有颜色设置在一个 Swift 文件中 该文件可以在我的整个应用程序中使用 下面的代码会导致 import Foundation import UIKit class DotColors let tsblueColor UICo
  • 如何向标准 UIButton 添加徽章? [关闭]

    Closed 这个问题需要多问focused help closed questions 目前不接受答案 是否可以在标准中添加看起来标准的徽章UIButton 如果不支持半原生 那么实现此目的最简单的方法是什么 示例图片 这是 Sascha
  • 在 appdelegate 中呈现多个模态视图

    我想在应用程序收到 application UIApplication application didReceiveRemoteNotification NSDictionary userInfo 中的每个推送消息后呈现一个 modalvi
  • 为什么是 javascript:history.go(-1);无法在移动设备上工作?

    首先 一些背景 我有一个向用户呈现搜索页面 html 表单 的应用程序 填写标准并单击 搜索 按钮后 结果将显示在标准部分下方 在结果列表中 您可以通过单击将您带到新页面的链接来查看单个结果的详细信息 在详细信息页面中 我添加了一个 返回结
  • 访问目标 c 中的类方法。使用 self 还是类名?

    我正在学习 iOS 编程 并且对以下有关关键字 self 的使用的代码感到困惑 据我了解 self就像Java的this 它指的是当前实例 当我想调用类方法时 通常的方式应该是这样 PlayingCard validSuits 但是侵入实例
  • UITableViewCell显示多种字体

    我想在 uitableviewcell 中以类似于 iPhone 地址簿的不同字体显示两个单词 例如 约翰Buchanan 您应该使用两个 UILable 或者您可以使用OH属性标签 https github com AliSoftware
  • 模态转场需要点击 2 次而不是 1 次

    我的 UITableView 需要点击 2 次才能显示所选单元格的详细信息页面 一次用于选择 另一次用于显示详细信息视图 我希望有一个 CLI 直接显示所单击单元格的详细视图 我在 UITableViewManager m 中使用此方法的模
  • 为什么 Objective-C 允许在方法定义末尾使用分号? [复制]

    这个问题在这里已经有答案了 可能的重复 Objective C 实现文件中方法名后面的分号 https stackoverflow com questions 5678360 semicolon after the method name
  • 是否可以跨 2 个不同的 iOS 应用程序访问数据?

    假设我在 App1 中存储了一些 ID 数据 并希望在同一设备上的 App2 中访问它 平台上可以这样吗 如果没有的话有什么解决方法吗 您可以使用iOS 钥匙扣 http developer apple com library ios do
  • ios - 如何声明静态变量? [复制]

    这个问题在这里已经有答案了 C 中声明的静态变量如下 private const string Host http 80dfgf7c22634nbbfb82339d46 cloudapp net private const string S
  • 隐藏选项卡栏项目并对齐其他选项卡项目

    在我的应用程序中 我有 4 个选项卡栏项目 我正在 XIB 文件中添加这 4 个选项卡栏项目 最初我必须显示 3 个选项卡栏项目 同步后我必须在我的应用程序中显示第 4 个选项卡栏项目 因此 为此 我使用以下代码隐藏第四个选项卡栏项目 se

随机推荐

  • 如何在 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