У меня есть подкласс 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];
}
}
Вы ожидаете, что когда я нажму ^ + 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.