motionEnded被多次调用
我有一个UIViewController子类,我试图在视图启动时处理shake事件。motionEnded被多次调用
下面是相关的方法我已经实现:
- (void)viewDidAppear:(BOOL)animated {
[super viewDidAppear:animated];
[self becomeFirstResponder];
}
- (void)viewDidDisappear:(BOOL)animated {
[self resignFirstResponder];
[super viewDidDisappear:animated];
}
- (BOOL)canBecomeFirstResponder {
return YES;
}
- (void)motionEnded:(UIEventSubtype)motion withEvent:(UIEvent *)event {
if (motion == UIEventTypeMotion && event.type == UIEventSubtypeMotionShake) {
NSLog(@"%@ motionEnded", [NSDate date]);
}
if ([super respondsToSelector:@selector(motionEnded:withEvent:)]) {
[super motionEnded:motion withEvent:event];
}
}
你会想到,当我打^ + Cmd的+ Z在iPhone模拟器,它将只需登录一次,但它始终两次记录为每个事件。下面是三个“摇动”模拟的结果:
2009-10-09 20:52:06.216 TestApp [39802:20b] 2009-10-09 20:52:06 -0400 motionEnded
2009-10- 09:20:52:06.218 TestApp [39802:20b] 2009-10-09 20:52:06 -0400 motionEnded
2009-10-09 20:52:07.689 TestApp [39802:20b] 2009-10-09 20: 52:07 -0400 motionEnded
2009-10-09 20:52:07.690 TestApp [39802:20b] 2009-10-09 20:52:07 -0400 motionEnded
2009-10-09 20:52:08.001 TestApp [39802:20b] 2009-10-09 20:52:08 -0400 motionEnded
2009-10-09 20:52:08.002 TestApp [39802:20b] 2009-10-09 20:52:08 -0400 motionEnded
有没有人看过这个,如果是的话,你是如何解决它的?我正在使用iPhone SDK 3.1和Xcode版本3.1.4。
这里是我所发现的,看起来像一个SIM卡错误对我说:
- 问题(双motionEnded通知)时,目标是在SIM OS 3.1和3.1.0
- 不会出现此问题发生时SIM卡上的目标为3.0
问题无论目标是什么,实际设备都不会发生问题。
所以这必须是一个模拟错误。 当我有机会我会提交作为一个错误苹果w/repro
还没有看到这个,但你可能想尝试它,而无需调用超级方法。 motionEnded
(来自UIResponder)的默认实现应该是NOP,所以不需要调用父方法。
另外,你有没有尝试过这个设备本身?这可能是一个模拟器问题。
删除超级块仍具有相同的效果。我没有在实际的设备上测试过它,因为我很便宜,并且一直在付费购买iPhone开发者计划:)。 –
你们每个人都弄明白了吗?我有同样的问题 – Mark