我有一个UIViewController子类,我试图在其视图启动时处理抖动事件。
以下是我实施的相关方法:
- (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];
}
}
你会期望当我在iPhone模拟器中点击^ + Cmd + Z它只会记录一次,但它会为每个事件一直记录两次。以下是三次“震动”模拟的结果:
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。
答案 0 :(得分:3)
我发现的内容对我来说看起来像是一个sim bug:
无论目标如何,问题都不会发生在实际设备上。
所以这必须是一个sim bug。 当我有机会将我作为一个错误提交给苹果w / repro
答案 1 :(得分:1)
没有看到这个,但你可能想在不调用super方法的情况下尝试它。 motionEnded
(来自UIResponder)的默认实现应该是NOP,因此不需要调用父方法。
另外,你在设备上试过这个吗?这可能是一个模拟器问题。