如何在iOS中以编程方式触发震动事件?
我尝试了以下方法,但它一直崩溃...
+ (void)shake {
NSLog(@"TEST");
UIMotionEventProxy *m = [[NSClassFromString(@"UIMotionEvent") alloc] _init];
m->_subtype = UIEventSubtypeMotionShake;
m->_shakeState = 1;
[[[UIApplication sharedApplication] keyWindow] motionBegan:UIEventSubtypeMotionShake withEvent:m];
[[[UIApplication sharedApplication] keyWindow] motionEnded:UIEventSubtypeMotionShake withEvent:m];
}
苹果在
Hardware > Shake Gesture
下的模拟器中做什么? 最佳答案
更改UIMotionEventProxy类(添加两个setter方法)似乎可以解决问题。我仅添加了两种方法setShakeState
和_setSubtype
,如下所示。
-(void)setShakeState:(int)fp8 {
_shakeState = fp8;
}
-(void)_setSubtype:(int)fp8 {
_subtype = fp8;
}
然后,我将代码更改为以下内容...
UIMotionEventProxy *m = [[NSClassFromString(@"UIMotionEvent") alloc] _init];
[m setShakeState:1];
[m _setSubtype:UIEventSubtypeMotionShake];
[[UIApplication sharedApplication] sendEvent:m];
[[[UIApplication sharedApplication] keyWindow] motionBegan:UIEventSubtypeMotionShake withEvent:m];
[[[UIApplication sharedApplication] keyWindow] motionEnded:UIEventSubtypeMotionShake withEvent:m];
对于模拟器和物理设备而言,似乎都可以正常工作。 Here是可以下载的主文件和头文件,如果有人想查看完整的UIMotionEventProxy文件。