首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >iOS 13撤消/重做手势的手势识别器在哪里?

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

Stack Overflow用户
提问于 2019-10-24 18:16:47
回答 2查看 1.6K关注 0票数 5

在iOS 13中,有三个手势被解释为请求撤消和重做:

  • 三指双击意味着松开。
  • 用三个手指向左滑动意味着撤销。
  • 用三根手指快速右转就意味着重做。

检测这些手势的手势识别器在哪里?我该怎么做才能推翻他们,关掉他们,或者在他们和我自己的手势之间进行仲裁呢?

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2019-10-25 01:59:30

看起来有一个名为UIUndoGestureRecognizer的私有类,它被附加到一个UIEditingOverlayGestureView上,它生活在UITextEffectsWindow中的一个UIInputSetContainerView中。(为了解决这个问题,我在UndoManagerregisterUndo处理程序中放置了一个断点,然后尝试用三个手指向左滑动,然后在生成的堆栈跟踪和汇编代码中穿插,直到找到手势识别器实例。)

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

票数 7
EN

Stack Overflow用户

发布于 2019-10-24 19:15:15

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

它是通过系统统一的,所以如果您使用UndoManager(更多细节)或NSUndoManager,它是完全免费的。所以,如果你像使用震动一样实现它,它也适用于这个手势。

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

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

代码语言:javascript
复制
public protocol UIResponder {
    var editingInteractionConfiguration: UIEditingInteractionConfiguration
}

它是一个枚举:

代码语言:javascript
复制
public enum UIEditingInteractionConfiguration {
    case `default` // System behavior 
    case none // Disable
}

因此,它将被禁用,比如:

代码语言:javascript
复制
override var editingInteractionConfiguration: UIEditingInteractionConfiguration { .none }

Sorce:

WWDC 2019 - 更新您的iOS用户界面13 - 37:00

注意到在iOS 13中有更多的手势,例如,按一下中的3个手指会复制选定的文本,并将其捏出,会粘贴它。所有这些操作都与此协议一起连接到旧的样式操作(例如,经典的握手操作),您可以在任何responder中覆盖它。

苹果调用所有这些编辑手势,你就可以看到这里的会议

注意:

该会话中的一些信息并不是完全正确的,(例如,UIResponder不是protocol,实际上是class ),@matt在评论中提到了这一点。但我补充了这个答案的来源,你可以判断自己。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/58547067

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档