UITapGestureRecognizer 不适用于 .began 状态

2024-04-13

我在我的应用程序中添加了两个手势识别器UIView:

func tap(sender: UITapGestureRecognizer){
    if sender.state == .began {
        print("snapping photo")
    }

}
func longPress(sender: UILongPressGestureRecognizer) {
    if sender.state == .began {
        print("snapping video")
    }
}

当两者都设置为state == .began, only longPress火灾。当我将点击设置为.ended,均着火。

为什么当其状态设置为 时,tap 不起作用.began?


The 处理 UIKit 手势 https://developer.apple.com/documentation/uikit/touches_presses_and_gestures/handling_uikit_gestures告诉我们:

手势识别器有两种类型:离散和连续。 A离散手势识别器在识别手势后立即调用您的操作方法。在满足其初始认可标准后,连续手势识别器Performs 多次调用您的操作方法,每当手势事件中的信息发生变化时通知您。

...

The state https://developer.apple.com/documentation/uikit/uigesturerecognizer/1619998-state手势识别器的属性传达了对象当前的识别状态。对于连续手势,手势识别器会更新此属性的值.began to .changed to .ended, or to .cancelled。您的操作方法使用此属性来确定适当的操作过程。

The UITapGestureRecognizer是一个离散手势,因此,当手势被识别时,您的事件处理程序将被调用一次。 实际上,这意味着您的点击手势识别器处理程序不会在以下状态下被调用:.began。然而,人们呼吁建立一种状态.ended.

(The 处理 UIKit 手势 https://developer.apple.com/documentation/uikit/touches_presses_and_gestures/handling_uikit_gestures文档告诉我们,离散手势的处理程序将被称为“恰好一次”。这与我的经验是一致的。令人困惑的是,点击手势文档 https://developer.apple.com/documentation/uikit/uitapgesturerecognizer处理点击手势 https://developer.apple.com/documentation/uikit/touches_presses_and_gestures/handling_uikit_gestures/handling_tap_gestures参考文献建议人们应该测试一种状态.ended尽管在实践中,这是唯一会调用点击手势处理程序的状态。无论如何,虽然寻找一种状态可能是谨慎的.ended,永远不要期望看到这样的状态.began在你的离散手势处理程序中。)

The UILongPressGestureRecognizer另一方面,是一个连续的手势,因此检查状态非常有用(确定手势何时.began, .changed, .ended, ETC。)。这就是为什么你看到它要求state of .began.

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

UITapGestureRecognizer 不适用于 .began 状态 的相关文章

  • NSUserDefaults 多久同步一次?

    的文档NSUserDefaults说synchronise方法被定期调用 但没有提及频率 10分钟的谷歌搜索没有发现任何信息 发生的频率是多少synchronise方法调用 这是一个未公开的实现细节 可能甚至不是一个恒定的时间间隔 但是 您
  • 在 React Native 中将 Swift 事件发送到 Javascript 的正确流程

    我一直在尝试使用 Swift 构建全面的蓝牙功能 我目前陷入了如何将事件从 Swift 发送回 React Native 的困境 我尝试过this https stackoverflow com questions 31870775 rea
  • 如何在 Firebase Analytics 事件中报告参数

    我用过Fabric with iOS在此之前 在同一分析事件中报告自定义参数非常容易 如下所示 Answers logCustomEvent withName saved border customAttributes image inde
  • iOS 上的 OpenCV - VideoCapture 属性始终返回 1

    我一直在尝试构建一个简单的 OpenCV iOS 应用程序 该应用程序从捆绑包中加载视频并查询其帧数 持续时间等 然后它将尝试从中获取各个帧 不幸的是 当我使用VideoCapture类中 所有属性返回值 1 然后我尝试导航到frame 1
  • WKWebView 未打开自定义 URL 方案(js 在新窗口中打开自定义方案链接)

    我有一个WKWebView在我的应用程序中 我不使用UIWeb视图 因为由于某种奇怪的原因 它无法正确打开包含大量 JS 代码的网页 当我点击链接时自定义 url 方案 scm 它确实nothing My code void viewDid
  • 启动深色或浅色模式的图像

    如何为深色模式和浅色模式选 择一组不同的启动图像 我有一个 LaunchImages 集 当应用程序启动时 会显示一个图像 对于浅色模式 这似乎不错 但是如果我尝试在设置为深色模式 iOS 13 的设备上打开我的应用程序 则该图像看起来很糟
  • 重叠的装载机圆

    我试图重现苹果为应用程序 活动 制作的重叠圆圈 见下图 如果您使用标准贝塞尔路径 起始 结束位置将仅在 0 到 2PI 之间产生影响 例如 如果您尝试填充 4PI 即使使用一些阴影 则无法模拟重叠加载 如何制作类似于苹果解决方案的东西来创建
  • iOS UITableViewCell cell.imageView 设置圆角

    嘿我正在尝试设置cell imageView s cornerRadius 但似乎不起作用 cell imageView layer cornerRadius 9 它会起作用还是我应该添加自定义UIImageView在我的牢房里有圆角吗 我
  • Swift 3 中的 JSON 解析

    有没有人能够找到一种在 Swift 3 中解析 JSON 文件的方法 我已经能够返回数据 但在将数据分解为特定字段时我没有成功 我会发布示例代码 但我已经尝试了很多不同的方法但没有成功 并且没有保存任何代码 我想要解析的基本格式是这样的 提
  • 对成员“buildBlock()”的引用不明确

    我一直在尝试使用 Swift UI 为 iOS 13 制作一个应用程序 但我不断收到这个奇怪的错误 对成员 buildBlock 的引用不明确 无论我做什么 错误都不会消失 我尝试一次对代码段进行注释 以查看哪一部分可能导致了问题 但唯一有
  • 从 Mac 命令行访问 iOS 应用程序目录(沙箱)

    我需要使用 Mac 或 Linux 上的命令行 非 GUI 访问 iOS 设备上安装的应用程序的沙箱目录 这有助于开发和测试自动化 将 json 文件放入沙箱中可以让我设置参数 例如额外的调试消息和更小的刷新间隔 像 iFunBox 这样的
  • NSTimer 不触发选择器

    在带有 ARC 的 ios5 0 中 在我的 rootviewcontroller 中 我调用由应用程序委托持有的安全管理器对象中的方法 在该方法中 我设置计时器如下 NSTimer timer NSTimer scheduledTimer
  • Swift 中的柯里函数

    我想创建一个返回柯里函数的函数 如下所示 func addTwoNumbers a Int b Int gt Int return a b addTwoNumbers 4 b 6 Result 10 var add4 addTwoNumbe
  • iOS 解决方法:在没有 CSS 属性的情况下平滑滚动 滚动行为:平滑?

    编辑 我找到了一个 jQuery 解决方案 https codepen io chriscoyier pen dpBMVP https codepen io chriscoyier pen dpBMVP这个确实可以在 iOS 上运行 我想
  • ios 在后台处理推送通知

    我想保存应用程序处于后台状态时到达的推送通知 我知道关于 void application UIApplication application didReceiveRemoteNotification NSDictionary userIn
  • 如何将 LC_LOAD_DYLIB 命令插入 Mach-O 二进制文件或将静态库加入现有二进制文件 (IOS)

    这是我第一次在 stackoverflow 上提问 我很绝望 我的任务是加载 dylib 或将静态库加入到 IOS 设备的现有可执行文件中 我将使用static void attribute constructor initialize v
  • 可以获取位置,但无法获取航向

    我目前只使用模拟器 但我在 iOS 模拟器上快速使用 CoreLocation 时遇到问题 我得到此代码打印的位置更新 但从未得到标题 我不想当然 我正在尝试制作一个指南针类型的应用程序 它将显示目标的方位 class CompassVie
  • XCode 4.5 给我“SenTestingKit/SenTestKit.h”文件未找到,但适用于 4.4.1

    我刚刚安装了 XCode 4 5 它在我现有的项目之一上给了我一个 SenTestingKit SenTestingKit h 文件未找到错误 此错误仅发生在 XCode 4 5 中 但它在 4 4 1 上编译正常 我已经检查过SenTes
  • 在 HTML5 iOS 7 / iOS 8 中显示十进制键盘

    经过几个小时的搜索后 我只是有一个简单的问题 是否有可能在网络浏览器输入字段中显示小数键盘 input type number 只显示数字 但我需要在左下角使用逗号或点 我尝试过任何事情 pattern step等等 但没有显示十进制键盘
  • iOS 电池监控 Swift

    我已将监控设置为启用 但模拟器和设备中的电池电量仍然为 1 UIDevice currentDevice batteryMonitoringEnabled true var level UIDevice currentDevice batt

随机推荐

  • 错误:错误域=NSURLErrorDomain代码=-1001“请求超时。”

    我正在 Xcode 6 1 iOS 8 1 中开发一个应用程序 该应用程序直到 2 天前都工作得很好 但今天当我执行它时 我在网络服务中遇到了错误 错误打印在下面 错误 错误域 NSURLErrorDomain代码 1001 请求计时 出
  • 如何使用 Java 8 可选,在三个都存在的情况下执行操作?

    我有一些使用 Java 可选的 简化的 代码 Optional
  • SSRS 计算行组和列组的计数

    我正在构建案例结果报告 其中对行组和单列分组进行父子分组 Parent Row Group Location 子行组 结果 列组 月份 报告中贯穿的是一年中的月份 报告中贯穿的是位置以及给定月份中该位置的不同结果细分 看起来像这样 Jan
  • Twitter API:获取关注者 +99

    使用 twitter API 和 OAuth 如果我要调用用户关注者 状态 关注者 我将仅返回 99 个结果 有没有办法让我返回 99 然后从关注者 100 开始再次调用 然后循环这种调用方式 直到返回关注者总数 或者只是返回所有关注者 您
  • Android 日历视图 - 将滚动方向更改为垂直

    我在导航抽屉内的应用程序中使用日历视图来选择不同的日期 除了在日历视图上向左滑动以到达下个月 向右滑动正确更改上个月 之外 一切正常 因为这是关闭抽屉的滑动手势 是否可以将日历的滚动方向更改为垂直而不是水平 我想实现这一点 这样用户就不必严
  • JavaFX - 以编程方式设置目标路径以直接将节点打印到 pdf 文件

    我想使用 Microsoft Print to PDF 打印机将节点打印到 pdf 文件 假设 Printer 对象已经被提取 我有下一个功能 该功能运行良好 public static void printToPDF Printer pr
  • Canvas 类绘图基元的除法独立性

    Android Canvas 类支持一组丰富的绘图基元 圆 线等 我有一个应用程序使用这些图元来绘制一些统计数据 阅读完相关说明后http developer android com reference android graphics C
  • 在node_modules/dojo/dojo.js的resolveDepMaps()中出现“TypeError: deps.map is not a function”

    我一直在更改我的组织的底层基础设施 以将我们的自动化测试从使用单独的 Web 服务器在浏览器客户端中运行切换到在测试运行程序 实习运行程序 中运行 在测试运行器环境中 一切进展顺利 我解决了很多问题 但随后繁荣起来 有人删除了一个新的单元测
  • 如何创建一个值超过允许的最大整数的枚举?

    我正在 C 中创建一个枚举 以使用二进制标志创建一个有限状态机 看起来像 enum VStates NEUTRAL 0x00000000 000000 Physical Status DRY 0x00000001 000001 WET 0x
  • Java Web 服务 - Axis 是必要的吗?

    Is AXIS or CXFJava Web 服务必需吗 这一切都可以通过 JDK 1 6 完成吗 Java Web 服务需要 AXIS 或 CXF 吗 不 虽然Axis2 http ws apache org axis2 是使用 Web
  • 如何设计“冰淇淋三明治”选项卡之间的分隔线样式?

    我将以下样式与一组九个补丁图像一起使用 在一些冰淇淋三明治选项卡的底部创建一条红线 而不是标准的蓝线
  • 在c#中将未命名的json数组反序列化为对象

    想知道如何在 C 中反序列化以下字符串 access token thisistheaccesstoken 如果 json 是 我知道该怎么做 array access token thisistheaccesstoken 我会这样做 pu
  • java 注释:用 xml 文件覆盖注释的库

    Java 有注释 这很好 然而 一些开发人员认为最好使用 xml 文件用元数据注释代码 其他开发人员更喜欢注释 但会使用元数据覆盖源代码中的注释 我正在编写一个使用注释的 Java 框架 问题是 是否有一种标准方法来定义和解析 xml 文件
  • 处理回调

    我在 Objective C 类中有一个方法 它有 2 个用 C 编写的回调函数 类指针 即self被传递给这些函数作为void 在 C 函数中 我创建一个类型为 class 的指针并分配void 范围 第一个回调函数执行成功 但是void
  • 使用 FFMPEG 播放音频

    我一直在尝试使用 NDK 将 FFMPEG 用于播放音频 移植到 Android 中 我取得了一些成功 我可以构建 FFMPEG 并通过 NDK 链接它 我可以打电话avcodec decode audio3 并解码给定的音频文件 所以这里
  • java并发hashmap

    这似乎是错误的 static ConcurrentHashMap k multiple threads have access to k X o k get LL o a 6 如果多个线程同时访问 k 并获取 k LL 然后在没有 k pu
  • 使用 glassfish 4 和 Postgres 在 eclipselink 中创建数据库不起作用

    我想创建基于实体的数据库 配置 Glassfish GlassFish 服务器开源版 4 1 版本 13 Eclipselink Eclipse 持久性服务 2 5 2 v20140319 9ad6abd 随 glassfish 提供 数据
  • Python:PDF:如何读取带有单选按钮的表单

    我创建了一个带有一些单选按钮的表单 遵循以下示例使用 Python 在 ReportLab 中创建交互式 PDF 表单 https www blog pythonlibrary org 2018 05 29 creating interac
  • sublimegdb 无法停在断点处

    我在 sublime text 2 中安装了 sublimeGDB 并且我的设置是正确的 然后我在一行中按 F9 设置断点 当我按F5运行时 我发现我的程序无法停在断点处 并且程序运行完毕 下面显示的信息是 GDB session结束 GD
  • UITapGestureRecognizer 不适用于 .began 状态

    我在我的应用程序中添加了两个手势识别器UIView func tap sender UITapGestureRecognizer if sender state began print snapping photo func longPre