在 iOS 游戏中禁用 iOS 可达性滑动手势

Dan*_*ndy 2 ios sprite-kit swift

我有一个 iOS 游戏,在屏幕底部附近有一些可以滑动的控件。当玩家向下滑动时,如果他们的手指滑离屏幕底部,也会触发Reachability 无障碍手势。然后滑下屏幕,将这些控件移出页面并隐藏游戏的一半。显然,这不是玩家的意图,并且要求他们的滑动非常具体,这不是很直观或很有趣。

在圆形 iPhone 套件上,控件距离屏幕底部大约 100 pt,为主页指示器留出空间,这有助于在许多情况下防止出现此问题,但在方形设备上,它们更接近 10 pt:

向下滑动示例

在我的初步测试中,我发现即使在屏幕上开始高达 300pt 的滑动一直持续到屏幕底部,也会触发可达性。因此,将我的控件调高并不是解决方案,因为这会使它们在屏幕上处于死角(也阻挡了游戏的焦点),并且在某些手机上无法舒适地使用手指。

由于 Reachability 在我的游戏中没有任何用处(屏幕的上三分之一没有控件用于将您的手保持在屏幕的下部)我真的想要一种方法来防止这个。理想情况下,在游戏过程中通过某种方式通知系统它是不必要的,因此我可以在非游戏菜单中允许它 - 但我可能在梦想那部分。我也不认为要求用户在整个系统范围内禁用此解决方案是一个很好的解决方案,因为这是我的应用程序的冲突,并且需要他们在其他地方改变他们的行为。

是否有关于如何处理与此特定可访问性手势的冲突的任何指导、示例或建议?

Kni*_*gon 5

你不想禁用它,你想推迟它。

请参阅https://developer.apple.com/documentation/uikit/uiviewcontroller/2887512-preferredscreenedgesdeferringsys

要使用它,您需要覆盖 preferredScreenEdgesDeferringSystemGestures 以推迟您需要延迟的屏幕部分。

在你的情况下:

override func preferredScreenEdgesDeferringSystemGestures() -> UIRectEdge {
    return [.bottom]
}
Run Code Online (Sandbox Code Playgroud)

现在,如果您以动态方式执行此操作,则还需要调用setNeedsUpdateOfScreenEdgesDeferringSystemGestures()以通知 iOS 您的规则正在更改。

  • 据我所知,经过尝试,preferredScreenEdgesDeferringSystemGestures 对可达性手势没有影响。 (4认同)
  • 这个答案得到了高度评​​价,但我只想再次声明_它不起作用。_虽然推迟底部系统手势可以防止向上滑动回家之类的事情,但它在纵向时对可达性辅助手势没有任何影响。您可以在《纪念碑谷》等游戏中看到这一点,这些游戏实现了延迟行为,或者您自己尝试一下。如果有任何其他详细信息,我将不胜感激。 (3认同)
  • 我最近从 Apple 收到一些反馈,表明这可能是一个错误,并且 PreferredScreenEdgesDeferringSystemGestures _应该_ 有效果。我已经明确询问过,如果是这种情况(并且如果推出修复程序),我会将其标记为已接受:) (2认同)