Ios 摇动手势不起作用

Ios 摇动手势不起作用,ios,iphone,swift,uigesturerecognizer,handshake,Ios,Iphone,Swift,Uigesturerecognizer,Handshake,我在我的ViewController(名为:“DashboardViewController”)中使用了collectionView,还实现了pull-to-sync(pull\u-Down\u从\u-Server获取\u数据)。我试过摇晃的姿势 myDashboard viewController中的代码(如下所示),其不工作,但在同一应用程序的另一个viewController中类似的代码正在工作 我在第一次尝试中使用了canBecomeFirstResponder,在viewDidLoad

我在我的ViewController(名为:“DashboardViewController”)中使用了
collectionView
,还实现了pull-to-sync(pull\u-Down\u从\u-Server获取\u数据)。我试过摇晃的姿势 my
Dashboard viewController
中的代码(如下所示),其不工作,但在同一应用程序的另一个
viewController
中类似的代码正在工作

我在第一次尝试中使用了
canBecomeFirstResponder
,在
viewDidLoad
中使用了
canBecomeFirstResponder
,然后在
viewdide中使用了
canBecomeFirstResponder
,但它也没用

要求: 实际上,我想知道“.motionShake”事件不直接触发的情况(如果有),我们必须以另一种方式实现吗?而且我没有发现任何有成果的东西 在谷歌上。


我们在工作中遇到了类似的事情


我们最终在UIWindow上创建了一个扩展,其中包含
motionStart
事件并转发了该事件。不确定是什么原因造成的,但它似乎与swift 3.0决裂了

看起来你的代码是从中复制出来的,实际上这个代码是用来获得抖动手势的,我使用它是为了我自己,你给出的参考是为了他的目的使用这个代码。代码可能类似,因为它是为使用而提供的,但不同之处在于我们使用它的方法@rmaddyI,如下面的答案所示。我不知道为什么,但在视图控制器级别(一个较旧的代码库;Xcode 8中的Swift 2.3)实现
MotionStart
功能时,我没有取得任何成功。我在UIWindow的一个扩展中实现了它,并发布了一个通知,效果很好。
override func viewDidLoad() {
 // call super
    super.viewDidLoad()
    self.becomeFirstResponder() // for shake gesture detection
}

// it will make first responder to detect shake motion event
override var canBecomeFirstResponder: Bool {
    get {
        return true
    }
}

// get detection of shake motion event
override func motionEnded(_ motion: UIEventSubtype, with event: UIEvent?) {
    if motion == .motionShake 
    {
        print("Shake detected")
    }
}