Ios 摇动手势不起作用
我在我的ViewController(名为:“DashboardViewController”)中使用了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
collectionView
,还实现了pull-to-sync(pull\u-Down\u从\u-Server获取\u数据)。我试过摇晃的姿势
myDashboard 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")
}
}