如何防止 iOS 游戏中的意外滑动

How to prevent accident swipe in iOS game

在 iPad(当前 运行 iOS 12 测试版)上测试我们的 SpriteKit iOS 游戏时,我们发现在屏幕上拖动可能会意外触发系统向上滑动手势(然后转到主屏幕或多任务屏幕)。

有没有办法禁用系统滑动(或者可能需要滑动两次)以防止意外滑动?

您可以使用

延迟手势
//Tell the system you prefer deferring
override func preferredScreenEdgesDeferringSystemGestures() -> UIRectEdge {

    return [.bottom] //Whatever side you want to defer, see UIRectEdge() https://developer.apple.com/documentation/uikit/uirectedge
}

然后在您希望 preferredScreenEdgesDeferringSystemGestures 触发时调用 setNeedsUpdateOfScreenEdgesDeferringSystemGestures()

有了这个,你现在可以先吸收手势,然后决定是否要传递它。

参考文献:
https://developer.apple.com/documentation/uikit/uiviewcontroller/2887507-setneedsupdateofscreenedgesdefer
https://developer.apple.com/documentation/uikit/uiviewcontroller/2887512-preferredscreenedgesdeferringsys
https://developer.apple.com/documentation/uikit/uirectedge

教程:
https://useyourloaf.com/blog/avoiding-conflicts-with-system-gestures-at-screen-edges/

iOS 11

更改为实例属性...

override var preferredScreenEdgesDeferringSystemGestures: UIRectEdge {
    return .bottom
}

或者,return .all 延迟所有边缘。