iOS 13 undo/redo 个手势的手势识别器在哪里?
Where are the gesture recognizers for the iOS 13 undo/redo gestures?
iOS13 中的新功能,三个手势被解释为要求撤消和重做:
三指双击表示撤销
三指向左滑动表示撤销
Swift右三指重做
检测这些手势的手势识别器在哪里?我该怎么做才能覆盖它们、关闭它们,或者在它们和我自己的手势之间进行仲裁?
检测用户何时执行 undo/redo 手势:
是系统统一的,所以使用UndoManager
(More details)或NSUndoManager
完全免费。所以如果你像使用摇动一样实现它,它也适用于手势。
更改手势的行为(以防止与应用程序的其他手势冲突)
您可以使用此变量更改它的配置:
public protocol UIResponder {
var editingInteractionConfiguration: UIEditingInteractionConfiguration
}
它是一个枚举:
public enum UIEditingInteractionConfiguration {
case `default` // System behavior
case none // Disable
}
所以它会是 禁用 比如:
override var editingInteractionConfiguration: UIEditingInteractionConfiguration { .none }
来源:
WWDC 2019 - Modernizing Your UI for iOS 13 - 37:00
注意iOS13还有很多手势,比如捏3个手指会复制选定的文本并捏住它们 out 将粘贴它。所有这些都连接到旧式操作(例如经典的 shake 操作)以及此协议,您可以在任何 responder
.
中覆盖它
Apple 调用了所有这些 Editing Gestures 你可以看到 the session here
注:
该会话中的某些信息并非完全真实,(例如 UIResponder
不是 protocol
,实际上是 class
)正如评论中提到的@matt .但是我已经添加了这个答案的来源,你可以自己判断。
看起来有一个名为 UIUndoGestureRecognizer
的私人 class 附加到 UIEditingOverlayGestureView
,后者位于 UITextEffectsWindow
内的 UIInputSetContainerView
中。 (为了解决这个问题,我在 UndoManager
的 registerUndo
处理程序中放置了一个断点,并尝试用三个手指向左滑动,然后在生成的堆栈跟踪和汇编代码中四处寻找,直到找到手势识别器实例。)
您可能会使用 UIGestureRecognizerDelegate
中的方法在您的手势识别器和这些系统识别器之间进行仲裁,并且您可以在视图控制器或视图中覆盖 editingInteractionConfiguration
或查看 return .none
为了完全关闭它们。
iOS13 中的新功能,三个手势被解释为要求撤消和重做:
三指双击表示撤销
三指向左滑动表示撤销
Swift右三指重做
检测这些手势的手势识别器在哪里?我该怎么做才能覆盖它们、关闭它们,或者在它们和我自己的手势之间进行仲裁?
检测用户何时执行 undo/redo 手势:
是系统统一的,所以使用UndoManager
(More details)或NSUndoManager
完全免费。所以如果你像使用摇动一样实现它,它也适用于手势。
更改手势的行为(以防止与应用程序的其他手势冲突)
您可以使用此变量更改它的配置:
public protocol UIResponder {
var editingInteractionConfiguration: UIEditingInteractionConfiguration
}
它是一个枚举:
public enum UIEditingInteractionConfiguration {
case `default` // System behavior
case none // Disable
}
所以它会是 禁用 比如:
override var editingInteractionConfiguration: UIEditingInteractionConfiguration { .none }
来源:
WWDC 2019 - Modernizing Your UI for iOS 13 - 37:00
注意iOS13还有很多手势,比如捏3个手指会复制选定的文本并捏住它们 out 将粘贴它。所有这些都连接到旧式操作(例如经典的 shake 操作)以及此协议,您可以在任何 responder
.
Apple 调用了所有这些 Editing Gestures 你可以看到 the session here
注:
该会话中的某些信息并非完全真实,(例如 UIResponder
不是 protocol
,实际上是 class
)正如评论中提到的@matt .但是我已经添加了这个答案的来源,你可以自己判断。
看起来有一个名为 UIUndoGestureRecognizer
的私人 class 附加到 UIEditingOverlayGestureView
,后者位于 UITextEffectsWindow
内的 UIInputSetContainerView
中。 (为了解决这个问题,我在 UndoManager
的 registerUndo
处理程序中放置了一个断点,并尝试用三个手指向左滑动,然后在生成的堆栈跟踪和汇编代码中四处寻找,直到找到手势识别器实例。)
您可能会使用 UIGestureRecognizerDelegate
中的方法在您的手势识别器和这些系统识别器之间进行仲裁,并且您可以在视图控制器或视图中覆盖 editingInteractionConfiguration
或查看 return .none
为了完全关闭它们。