UIScrollView 滚动时取消 UIPageViewController 手势

2023-12-07

我有一个UIPageViewController它负责翻我的“书”的页面。然而,每一本书的页面都是一个ViewController with a UIScrollView as a subview. The UIScrollView只能垂直滚动,因为contentSize。问题是当用户滚动时scrollview垂直方向上,如scrollview仍在滚动/减速,用户无法翻页。查看此情况的一个非常简单的方法是滚动页面,然后尝试点击视图的边缘。这通常会更改页面,并且当scrollview没有动。然而,当它移动时,点击会导致滚动视图停止移动而不是翻页。

我该如何取消scrollviews手势,如果UIPageViewController是否尝试使用手势翻页,通过点击或平移页面来引发翻页动画?

有关我想要实现的行为的示例,请查看 Twitter 在 iPhone 上的官方客户端。 当提要仍在因滚动而减速时,可以从时间轴滑动到发现。


A UIScrollView滚动事件会阻止其他事件UIView动画,所以就 Twitter 而言,他们可能会在滑动视图之前取消滚动。正如您在问题中所问的:

“如果 UIPageViewController 尝试通过点击或平移页面来使用手势翻页以引发翻页动画,如何取消滚动视图手势?”

我会建议一个解决方法。

而不是依赖于UIPageViewController其固有的UIPanGestureRecognizer,包括你自己的UIPanGestureRecognizer在页面视图中,以便当在页面的适当部分检测到平移并在适当的方向上执行平移时,新的UIPanGestureRecognizer覆盖UIPageViewController's UIGestureRecognizers 并触发必要的操作。具体来说,您需要:

(1) 使用停止滚动动画

CGPoint offset = scrollView.contentOffset;
[scrollView setContentOffset:offset animated:NO];

(2) 使用编程方式翻页

- (void)setViewControllers:(NSArray *)viewControllers direction:
  (UIPageViewControllerNavigationDirection)direction animated:
  (BOOL)animated completion:(void (^)(BOOL finished))completion;

这样滚动动画就会停止,翻页也可以在一个流畅的平移手势内完成。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

UIScrollView 滚动时取消 UIPageViewController 手势 的相关文章

  • 创建类似于邮件应用程序菜单的 iPhone 弹出菜单

    当您想要回复消息时 我想创建一个类似于邮件应用程序中的弹出菜单 我在多个应用程序中看到过这一点 所以我不确定框架中是否内置了某些内容或一些示例代码 在 Swift 中创建操作表 代码已使用 Swift 5 进行测试 从 iOS 8 开始 U
  • CLLocation Manager如何在一定距离后更新

    我正在使用 CLLocationManager didupdatelocations 如下所示 func locationManager manager CLLocationManager didUpdateLocations locati
  • iOS 中如何清除特定域的 cookie?

    我已经搜索了 StackOverflow 上的几乎所有问题来寻找我的问题的答案 我还没有找到任何有用的链接或教程来说明哪种方式最好清除特定域的 cookie 如果有人可以帮助我 请 我自己找到了解决方案 如果您想删除 UIWebView 中
  • 如何将导航栏大标题转换为多行,居中对齐

    我正在尝试设计具有多行居中大标题文本的视图控制器 就像苹果的 Ask Siri Settings gt General gt Keyboards gt About Ask Siri Dictation and Privacy 我可以使用以下
  • 从数组中获取随机字符串[重复]

    这个问题在这里已经有答案了 我试图从数组 firstArray 中获取随机字符串并将其打印在 UILabel label 中 我似乎无法弄清楚并且出现错误 感谢您的帮助 我尝试搜索但找不到任何最新的教程 方法 import UIKit cl
  • iPad 照片选择器崩溃

    我正在使用以下函数根据 UIActionSheet 的结果激活设备相机或图像选择器 如果 fromCamera YES 那么它适用于 iPhone 和 iPad 如果 fromCamera NO 那么它可以在 iPhone 上运行并出现图像
  • 检查定位服务是否开启

    我一直在对 CoreLocation 进行一些研究 最近 我遇到了一个在其他地方 但在 Objective C 和 iOS 8 中 已经讨论过的问题 我觉得问这个问题有点傻 但是如何在 iOS 9 上使用 swift 检查是否启用了位置服务
  • SwiftUI 列表与右侧的部分索引?

    是否可以有一个在右侧有索引的列表 就像下面 SwiftUI 中的示例一样 我在 SwiftUI 中做了这个 Contacts swift TestCalendar Created by Christopher Riner on 9 11 2
  • 修补应用内购买黑客;卡在第四步

    正如我们许多人所知 苹果最近出现了一种情况 黑客可以免费获得任何应用内购买 苹果最近发布了这个文件 http developer apple com library ios releasenotes StoreKit IAP Receipt
  • 将永久字符添加到 UITextField

    有没有办法将字母永久添加到 UITextField 中 用户无法删除它 我想添加一个字符 用户无法删除它 但他们仍然可以在之后添加字母 Cheers 附注这是适用于 iOS 的 A UITextField有一个名为 应该更改范围内的字符 的
  • 如何在 Firebase 控制台中使用 Apple 新的 APN .p8 证书

    随着最近 Apple 开发者帐户的升级 我面临着一个困难 在尝试创建推送通知证书时 它为我提供了 p8 证书 而不是可以导出到 p12 的 APNs 证书 Firebase 控制台仅接受 p12 证书 那么我如何从这些新的 p8 证书中获取
  • 是否可以使用 Firebase 安排推送通知? [复制]

    这个问题在这里已经有答案了 我已经阅读了我能找到的所有文档 但仍然不知道这是否可行 如果我是用户 我可以安排特定时间的推送通知吗 Example 1 我是用户并打开应用程序 2 我允许通知并转到 pickerView 或其他任何内容 并设置
  • 在 iOS 上将 NSString 转换为 NSDate 的正确方法?

    我一直在使用此方法将常规 NSString 对象转换为 NSDate 但尝试向 Apple 提交更新 但遭到拒绝 在 iOS 中还有什么其他方法可以做到这一点 NSString date str 2011 08 12T12 20 00Z N
  • 覆盖层不与 UITableView 一起滚动 - iOS

    我有一个 UITableView 类 它使用以下方法在转到下一个屏幕时调用加载覆盖 问题是这个加载屏幕不随列表滚动 所以如果你滚动一点并单击某些东西 加载屏幕不会显示 因为它位于顶部 如何让加载屏幕始终保持在 UITableView 的顶部
  • 如何使用 Swift 使用 TouchID?

    Apple 为 iOS 8 的 TouchID 实现提供的文档采用 Objective C 语言 有 Swift 版本吗 Objective C IBAction touchIDAvailable UIButton touchIDAvail
  • 如何在 React Native 中构造 POST 请求主体,而不是使用字符串化的 json,而是使用 json?

    我正在努力用 React Native 替换一些本机代码 预期的 POST 请求 在AFNetworking in Charles应该是这样的 代码片段 NSError err NSData paramData NSJSONSerializ
  • Apple Watch 预构建操作可更改故事板 customModule 引用

    我目前有一个项目 其中包含同一应用程序的 3 个不同版本 不同的品牌等 该项目运行得很好 从那时起 我添加了 3 个新的 Apple Watch 目标 每个应用程序 版本 1 个 其中 2 个引用 主 Apple Watch 目标中的文件
  • 在 iOS 中,如何创建一个始终位于所有其他视图控制器之上的按钮?

    无论是否呈现模态或用户执行任何类型的转场 有没有办法让按钮在整个应用程序中 始终位于顶部 而不是屏幕顶部 有什么方法可以让这个按钮可拖动并可捕捉到屏幕上吗 我正在以苹果自己的辅助触摸作为此类按钮的示例 您可以通过创建自己的子类来做到这一点U
  • Xcode 8 / Swift 3:“UIViewController 类型的表达式?未使用”警告

    我有以下函数 它之前编译得很干净 但在 Xcode 8 中生成警告 func exitViewController navigationController popViewController animated true UIViewCon
  • 在 UIScrollview 上显示缩略图的最佳方法是什么(从服务器下载)

    我想在 UIScrollview 如照片应用程序 上显示许多图像 作为缩略图 所有图像将从服务器下载 据我所知 有几种选择 1 通过创建 UIImageviews 然后将它们添加为主滚动视图上的子视图 2 通过子类化一个UIView类 然后

随机推荐

  • Angular2中如何动态添加克隆节点(相当于cloneNode)

    在 Angular2 中 在某些情况下我需要复制节点而不是移动它 该节点具有 angular2 属性 因此 cloneNode 不起作用 我该怎么做 什么不起作用 let el
  • 将 BSTR 从 C++ DLL 函数传递到 VB6 应用程序

    我的 VB6 应用程序中有以下代码 Private Declare Function FileGetParentFolder Lib Z FileIO dll ByVal path As String As String Output Ad
  • 在 SVN 中创建包含内部版本号和分支名称的文件

    目前我工作的地方没有大量的部署控制 虽然有一个长期计划来创建一个处理部署的构建脚本 但目前我们只是发布我们的解决方案 然后将它们复制到服务器 如果有一个文本文件或类似的文件包含修订号和分支名称 作为实时系统上当前运行的版本的日志 这将非常有
  • Windows 中 sys/mman.h 的等效项

    我在尝试在 Win64 上编译 C 代码时遇到问题 更具体地说 编译器找不到sys mman hheader 据我所知只能在 Unix 环境中找到 我已经知道这是处理内存分配的 我可以使用 Windows 的等效工具来移植代码 第一次尝试
  • Swift 通用协议函数参数

    这似乎对我有用 我想做的就是让Rule协议能够performRule在任何采用该规则协议的结构上 然后返回一个布尔值 但是 按照我的代码当前的方式 我无法访问performRule value value范围 我觉得我错过了一个重要的概念或
  • 轮询 I/O (MIPS)

    我正在尝试在 MIPS 中编写一个程序 该程序使用轮询从键盘读取字符 然后使用内置键盘和显示器 MMIO 模拟器显示它 不幸的是 我无法理解所使用的寄存器和控制位背后的概念 但一直试图从在线示例中找出答案 这是我到目前为止所写的内容 dat
  • 使用套接字通过 Tcp/IP 发送消息

    我正在尝试在客户端 服务器之间发送数据 数据看起来像 typedef Struct Message int id int message length char message str message 我在尝试着Write and Read
  • 当用户滚动离开时如何暂停 YouTube 嵌入

    我一直在尝试寻求帮助 以便在用户滚动离开时让视频暂停 我已经能够找到 html5 视频的帮助 但现在我还需要知道如何使用 youtube API 来实现同样的目的 我嵌入 YouTube 的 html 结构如下 div class ytub
  • HTML5 画布图像上的插图阴影

    我以前见过这个问题 但给出的答案是针对通过路径绘制的画布图像 但是我正在绘制图像 是否有可能创建一个inset shadow context shadowOffsetX 0 context shadowOffsetY 0 context s
  • 如何在不移动其他元素的情况下放大div

    我怎样才能停止这个 div 将所有元素移动到您选择特定价格的位置下方 要了解我在说什么 请查看此链接 查看价格表样式3在其下方 您可以看到 当您选择某个价格表时 下面的所有元素都会因弹出而移动 我希望能够使用此功能 但当然不能移动下面的所有
  • 多个单通道矩阵转换为单个多通道矩阵

    我正在使用带有矩阵的 opencv c api 我有 4 个单通道 Mat 我想将其合并为一个 4 通道矩阵 它基本上是我在 4 个矩阵中拥有的 rgba 通道 并且想要组合成一个 rgba 图像 矩阵 谁知道该怎么做 您可以使用简历 合并
  • DQL 选择具有一列 MAX 值的每一行

    使用 Symfony 2 和 Doctrine 我正在寻找一种方法来选择特定列中具有最大值的每一行 现在 我正在两个查询中执行此操作 一种获取表中列的最大值 然后我选择具有该值的行 我确信这可以通过一个查询来完成 搜索中 我发现了这个答案
  • 如何在 C# 中更改组合框的外观

    我尝试在 xaml 中将 ComboBox 背景 前景 borderbrush 设置为蓝色只是为了测试 但它仍然保持丑陋的灰色 我也尝试过使用资源字典 但它不想改变 这是我使用组合框的 XAML
  • Haskell - 在模式匹配中使用常量

    假设我有以下代码 文本在 lt gt 是简写 实际上不是代码的一部分 data A
  • matlab导入多张图像

    我有一组连续命名的 100 张 jpg 图像 我想将它们相加以获得单个图像 我已经看到答案了here 但它不跟我一起运行 发生了什么事 这是代码 im imread C Documents and Settings 1026175117 1
  • 如何从文件中读取位?

    我知道如何读取字节 x read number of bytes 但是如何读取 Python 中的位呢 我必须从二进制文件中仅读取 5 位 而不是 8 位 1 字节 有什么想法或方法吗 Python 一次只能读取一个字节 您需要读取一个完整
  • 无需按 Control 键即可选择多行

    我有一个网格视图 可以通过按控制键选择多行 是否可以在不按控制键的情况下实现相同的目的 由于 net 默认操作也会更新slectedrows你的datagridview你需要有一个数组来保留旧的选择 DataGridViewRow old
  • Fragment 和 FragmentActivity 有什么区别?

    我的问题是除了明显的继承差异之外 两者之间的主要区别是什么Fragment and FragmentActivity 每个类别最适合什么场景 我试图了解为什么这两个类别存在 A Fragment是一个的一部分Activity 其中有 它自己
  • 按图像路径在数据库中的 RDLC 报告上显示图像

    图像路径存储在SQL Server 2008数据库中 在我的 RDLC 报告上 我有一个图像字段 我已设置此字段以从数据库中的数据库列获取图像路径 我还在报告查看器中将 EnableExternalImages 属性设置为 true 我不知
  • UIScrollView 滚动时取消 UIPageViewController 手势

    我有一个UIPageViewController它负责翻我的 书 的页面 然而 每一本书的页面都是一个ViewController with a UIScrollView as a subview The UIScrollView只能垂直滚