2011-04-07 85 views

回答

2

從這個SO質疑How do I detect when someone shakes an iPhone? 主要伎倆是,你需要有一些的UIView(不視圖控制器)要作爲firstResponder接收震動的事件消息。下面是你可以在任何的UIView用於獲取動搖事件的代碼:

@implementation ShakingView 

- (void)motionEnded:(UIEventSubtype)motion withEvent:(UIEvent *)event 
{ 
    if (event.subtype == UIEventSubtypeMotionShake) 
    { 
     // Put in code here to handle shake 
    } 

    if ([super respondsToSelector:@selector(motionEnded:withEvent:)]) 
     [super motionEnded:motion withEvent:event]; 
} 

- (BOOL)canBecomeFirstResponder 
{ return YES; } 

@end 

您可以輕鬆地將任何UIView的(甚至系統的意見)到一種意見認爲,可以通過與僅這些子類的觀點簡單地得到搖事件方法(然後在IB中選擇這個新類型而不是基類型,或者在分配視圖時使用它)。

在視圖控制器,你要設置這個觀點,成爲第一個響應者:

- (void) viewWillAppear:(BOOL)animated 
{ 
    [shakeView becomeFirstResponder]; 
    [super viewWillAppear:animated]; 
} 
- (void) viewWillDisappear:(BOOL)animated 
{ 
    [shakeView resignFirstResponder]; 
    [super viewWillDisappear:animated]; 
} 

不要忘了,如果你有成爲從用戶操作第一響應者(如搜索欄等觀點或文本輸入字段),當另一個視圖退出時,您還需要恢復抖動視圖第一響應者狀態!

即使您將applicationSupportsShakeToEdit設置爲NO,此方法仍然有效。

+0

Infact我有一個UIViewController類..有什麼辦法讓我的UIVIewController成爲一個UIView沒有重新編碼evrythinG? – 2011-04-07 08:27:54

+0

呃...一個UIViewController有一個視圖 - 類似於'myViewController.view'就能讓你看到它。 – SK9 2011-04-07 23:08:56