2011-03-06 47 views
21

我需要檢測何時陀螺儀/加速度計被激活一定的數量。基本上可以檢測設備何時移動。我對Core Motion一無所知。簡單的iPhone移動偵測

也許有人可以指導我初學者教程或什麼。

在此先感謝。

回答

34

我認爲你必須使用Core Motion。好消息是,使用問題域並不困難。開始閱讀Event Handling Guide,特別是處理處理設備 - 運動數據部分。如果您只是有興趣知道有輕微的動作,如您所述,您可以省略旋轉處理和CMDeviceMotion.userAcceleration上的窄信號處理。這是因爲每次旋轉都會產生加速度計信號。

創建CMDeviceMotionHandlerstartDeviceMotionUpdatesToQueue:withHandler: 你CMDeviceMotionHandler描述應該這樣做:

float accelerationThreshold = 0.2; // or whatever is appropriate - play around with different values 
CMAcceleration userAcceleration = deviceMotion.userAcceleration; 
if (fabs(userAcceleration.x) > accelerationThreshold) 
    || fabs(userAcceleration.y) > accelerationThreshold 
    || fabs(userAcceleration.z) > accelerationThreshold) { 
    // enter code here 
} 

基本上就是這樣。請記住,每次加速都會有對應的。這意味着,如果您使用力量將設備移動(即加速)到右側,則會有一個減速對象來停止移動並讓設備停留在新位置。因此,您的if條件對於每一個動作都會變爲兩次。

+0

你給的鏈接非常好!儘管我一直在尋找運動讀物,並閱讀所有相關的課程參考資料 - 我只是找不到這樣的總結 - 謝謝! – 2011-08-07 06:14:09

+0

感謝您以簡單易懂的方式解釋:) – Luqman 2013-05-30 14:46:38

+1

此鏈接已死「處理已處理的設備 - 運動數據」您能否更新鏈接? – bpolat 2014-08-21 16:43:21

2

viewDidAppear,成爲第一個響應者:

- (void)viewDidAppear:(BOOL)animated { 
    [super viewDidAppear:animated]; 
    [self becomeFirstResponder]; 
} 

並確保你可以第一個響應者:

- (BOOL)canBecomeFirstResponder { 
    return YES; 
} 

然後你就可以實現運動檢測。

- (void)motionEnded:(UIEventSubtype)motion withEvent:(UIEvent *)event 
{ 
    if (event.subtype == UIEventTypeMotion){ 
     //there was motion 
    } 
}