在Swift中检测Shake Gesture SpriteKit

时间:2017-02-01 19:34:14

标签: ios swift sprite-kit

我正在尝试检测SKScene中的摇晃手势。这是我正在使用的代码:

import SpriteKit
import UIKit
import CoreMotion

class Menu: SKScene {

override func didMove(to view: SKView) {      

     self.becomeFirstResponder()

     //Game Code

}

  override func becomeFirstResponder() -> Bool {
        return true
    }

 override func motionEnded(_ motion: UIEventSubtype, with event: UIEvent?) {
        if event?.subtype == UIEventSubtype.motionShake {
            //Run Code
        }
    }

    override func willMove(from view: SKView) {
        resignFirstResponder()
    }


}

但是motionEnded代码没有运行,就好像它没有检测到摇动手势一样。这是SKScene所以我不确定代码是否略有不同。

非常感谢任何帮助。

1 个答案:

答案 0 :(得分:4)

显然,您无法检测来自var information = { url: urlRoot, prepare: function (query, settings) { settings.type = "POST", settings.url += '?prefix=' + query; return settings; } }; var names = new Bloodhound({ datumTokenizer: Bloodhound.tokenizers.obj.whitespace('navn'), queryTokenizer: Bloodhound.tokenizers.whitespace, remote: information, }); 子类的震动事件,例如SKScene。但是,您可以从视图控制器中检测它们,例如GameScene。触发震动事件时,您可以从视图控制器中调用GameViewController中的摇动处理程序。

GameScene中,添加此内容以检测摇晃事件

GameViewController

并将其添加到override func motionBegan(_ motion: UIEventSubtype, with event: UIEvent?) { if motion == .motionShake { if let skView = view as? SKView, let scene = skView.scene as? GameScene { scene.shake() } } }

GameScene

修改

如果您需要检测来自多个func shake() { print("Shake") } 子类的摇动事件,您可以定义以下扩展名:

SKScene

并将以下内容添加到相应的extension SKScene { func shake() { } } extension SKView { open override func motionBegan(_ motion: UIEventSubtype, with event: UIEvent?) { if let scene = self.scene { scene.shake() } } } 子类

SKScene