【问题标题】:iOS VoiceOver - Cannot capture touches in ARKitiOS VoiceOver - 无法在 ARKit 中捕捉触摸
【发布时间】:2018-11-04 23:23:05
【问题描述】:

当 VoiceOver 被禁用时,我有一个带有 SceneKit 会话的功能性 ARKit。

我可以使用 touchesBegan(_:) 来捕捉触摸。

但是,当我激活 VoiceOver 时,触摸似乎被辅助功能框架捕获。我无法在场景视图中获得用户触摸的任何反馈以实施自定义操作。

我尝试将打印语句放入:

  • touchesBegan 方法
  • 一个调试子视图放置为带有点击手势识别器的场景视图的子视图
  • 在accessibilityScroll方法中

但他们似乎都没有被调用。 启用可访问性后,有什么方法可以获得用户触摸的任何反馈? (我只是想在双击时映射一些自定义操作) 或者注册一些可访问性通知以获得一些用户触摸反馈?

我还观察到以下可能相关的警告:

[Accessibility] *** -[SCNSceneAccessibilityaccessibilityContainer] 中的断言失败,@:10772554112。

@ [Accessibility] |SCNSceneAccessibility.m:44 -[SCNSceneAccessibilityaccessibilityContainer]|视图应该已经设置了我们的容器

编辑(解决方案)

情节提要中的最终设置允许捕获触摸: 1) 确保在主视图中启用辅助功能 2) 确保启用用户交互启用 3) 确保启用 Allows Direct Interaction trait

【问题讨论】:

    标签: ios accessibility scenekit arkit


    【解决方案1】:

    如果您想获得用户触摸的任何反馈,您必须让 VoiceOver 知道您的视图可以通过将其 accessibilityTraits 设置为 UIAccessibilityTraitAllowsDirectInteraction 来直接解释触摸事件。

    您应该收到此特定视图的手势通知,告诉您的应用负责触摸拦截,而不是旁白。

    如果您想在屏幕视图中插入可访问的子视图,我建议您disable its accessibility flag,因为如果父视图可访问,则其子视图不可访问。

    【讨论】:

    • 非常感谢!我设法让它工作,我要检查三件事才能捕获视图触摸:1)确保在主视图中启用了可访问性 2)确保启用了用户交互 3)确保启用了允许直接交互特征跨度>
    • 你知道为什么我得到“视图应该设置我们的容器”断言失败吗?
    • @michael-martinez :对不起,我没有。我从不启用用户交互,总是使用 VoiceOver 手势。您的断言失败并没有敲响警钟:可能为此发布一个新问题?
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2015-08-12
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-07-27
    • 1970-01-01
    相关资源
    最近更新 更多