2009-10-10 121 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模擬器,它將只需登錄一次,但它始終兩次記錄爲每個事件。下面是三個「搖動」模擬的結果:

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。

回答

3

這裏是我所發現的,看起來像一個SIM卡錯誤對我說:

  1. 問題(雙motionEnded通知)時,目標是在SIM OS 3.1和3.1.0
  2. 不會出現此問題發生時SIM卡上的目標爲3.0

問題無論目標是什麼,實際設備都不會發生問題。

所以這必須是一個模擬錯誤。 當我有機會我會提交作爲一個錯誤蘋果w/repro

+0

你們每個人都弄明白了嗎?我有同樣的問題 – Mark

1

還沒有看到這個,但你可能想嘗試它,而無需調用超級方法。 motionEnded(來自UIResponder)的默認實現應該是NOP,所以不需要調用父方法。

另外,你有沒有嘗試過這個設備本身?這可能是一個模擬器問題。

+0

刪除超級塊仍具有相同的效果。我沒有在實際的設備上測試過它,因爲我很便宜,並且一直在付費購買iPhone開發者計劃:)。 –