2009-10-10 4 views
2

У меня есть подкласс 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 Simulator, что было бы просто войти сразу, но последовательно регистрации дважды для каждого события. Ниже приведен результат трех "трясти" моделирование:

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 Version 3.1.4.

ответ

3

Вот что я обнаружил, как выглядит сим ошибка мне:

  1. выпуск (двойной motionEnded уведомления) происходит, когда цель OS 3.1 и 3.1.0 на сим
  2. проблема не возникает, когда target - 3,0 на sim

Проблема НИКОГДА не происходит на самом устройстве, независимо от цели.

так что это должна быть ошибка сима. Когда у меня есть шанс, я отправлю в качестве ошибки к яблоку с репродукцией

+0

Вы все это исправили? У меня такая же проблема – Mark

1

Не видел этого, но вы можете попробовать его, не используя метод super. Предполагаемая по умолчанию реализация motionEnded (из UIResponder) должна быть NOP, поэтому нет необходимости вызывать родительский метод.

Кроме того, вы пробовали это на самом устройстве? Это может быть проблема симулятора.

+0

Удаление суперблока все еще имеет тот же эффект. Я не тестировал его на самом устройстве, потому что я дешев и откладываю оплату за доступ к программе разработчика iPhone :). –

Смежные вопросы