2016-05-06 63 views
6

我正試圖檢測用戶在另一個物體上碰撞他們的iPhone的時間與他們剛抖動手機時的情況。我似乎無法像我想要的那樣完美地工作,因爲它要麼登記過多的顛簸,要麼沒有顛簸,要麼認爲搖動是一個顛簸。CoreMotion在iPhone上碰撞與抖動

有人可以看看我的代碼,並提供建議嗎?我需要確保一個或另一個發生。

// SHAKING 
- (void) motionEnded: (UIEventSubtype) motion withEvent:(UIEvent *)event 
{ 
if (motion == UIEventSubtypeMotionShake) 
{ 
    [self setNumberOfShakes: [self numberOfShakes] + 1]; 
    [self reloadAllTapShakeData]; 
} 
} 

// TAPPING & BUMPING 
- (void) setupAccelerometerMonitoring 
{ 
[self setManager: [[CMMotionManager alloc] init]]; 
if ([[self manager] isDeviceMotionAvailable]) 
{ 
    [[self manager] setDeviceMotionUpdateInterval: 0.02]; 
    [[self manager] startDeviceMotionUpdatesToQueue: [NSOperationQueue mainQueue] withHandler: ^(CMDeviceMotion * _Nullable motion, NSError * _Nullable error) 
    { 
     //NSLog(@"x = %f | y = %f | z = %f", [motion userAcceleration].x, [motion userAcceleration].y, [motion userAcceleration].z); 
     if (([motion userAcceleration].x > .50 && [motion userAcceleration].x < 1) 
      || ([motion userAcceleration].y > .70 && [motion userAcceleration].x < 1) 
      || ([motion userAcceleration].z > .80 && [motion userAcceleration].z < 1)) 
     { 
      NSLog(@"TAPPED ON ANOTHER OBJECT"); 
     } 
    }]; 
} 

}

回答

-1

我相信這是一個不同的答案,但是這可能會幫助你。

https://github.com/bumptech/bump-api-ios

它具有像

[[BumpClient sharedClient] setBumpEventBlock:^(bump_event event) { 
     switch(event) { 
      case BUMP_EVENT_BUMP: 
       NSLog(@"Bump detected."); 
       break; 
      case BUMP_EVENT_NO_MATCH: 
       NSLog(@"No match."); 
       break; 
    } 
}]; 

對於完整的例子結帳git的某個功能塊。

+0

他們的API不起作用了嗎?沒有API密鑰,這仍然有效嗎? –

+0

試過了。它不再兼容。 –