iOS 13撤消/重做手势的手势识别器在哪里?

时间:2019-10-24 18:16:47

标签: ios uigesturerecognizer ios13 undo

iOS 13中的新增功能,三个手势被解释为要求撤消和重做:

  • 用三个手指双击意味着撤消。

  • 用三个手指向左滑动表示撤消操作。

  • 用三根手指向右快速表示重做。

在哪里可以检测到这些手势的手势识别器?我该怎么做才能覆盖它们,将其关闭或在它们与我自己的手势之间进行仲裁?

2 个答案:

答案 0 :(得分:2)

好像有一个名为UIUndoGestureRecognizer的私有类,它连接到UIEditingOverlayGestureView上,该类位于UIInputSetContainerView内的UITextEffectsWindow中。 (要弄清楚这一点,我在UndoManager的{​​{1}}处理程序中放置了一个断点,并尝试用三根手指向左滑动,然后在生成的堆栈跟踪和汇编代码中四处寻找,直到找到手势识别器实例。)

您可能可以使用registerUndo中的方法在手势识别器和这些系统识别器之间进行仲裁,并且可以在视图控制器中覆盖UIGestureRecognizerDelegate或按顺序返回editingInteractionConfiguration完全关闭它们。

答案 1 :(得分:-1)

要检测用户何时执行撤消/重做手势:

它是通过系统统一的,因此,如果您使用的是Parent Permit Sub Permit Value Total 0 BLD-00045 NaN 70000 1 ELE-2019 BLD-00045 100 2 PLM-2019 BLD-00046 200 ---------__ Parent Permit Sub Permit Value Total 0 BLD-00045 NaN 70000 1 ELE-2019 BLD-00045 0 2 PLM-2019 BLD-00046 200 More details)或UndoManager,则它是完全免费的。因此,如果您像使用摇杆一样实现它,那么它也适用于手势。

更改手势的行为(以防止与应用程序的其他手势冲突)

您可以使用以下变量更改其配置:

NSUndoManager

它是一个枚举:

public protocol UIResponder {
    var editingInteractionConfiguration: UIEditingInteractionConfiguration
}

因此它会禁用,例如:

public enum UIEditingInteractionConfiguration {
    case `default` // System behavior 
    case none // Disable
}

来源:

WWDC 2019-Modernizing Your UI for iOS 13 - 37:00

请注意,iOS 13中还有更多手势,例如,将3根手指按 in 会复制所选文本,并向外 >将其粘贴。它们都与此协议一起连接到旧式动作(例如经典的 shake 动作),您可以在任何override var editingInteractionConfiguration: UIEditingInteractionConfiguration { .none } 中覆盖它。

Apple将所有这些编辑手势都调用,您会看到the session here

注意:

该会话中的某些信息并非完全正确,例如注释中提到的@matt(例如,responder不是UIResponder,实际上是protocol)。但是我添加了此答案的来源,您可以自己判断。