2012-04-16 5 views

답변

13

대체로 iOS 4.0에 도입 된 Core Motion framework을 사용해야합니다. CMMotionManager의 인스턴스를 만들고 startAccelerometerUpdatesToQueue:withHandler:으로 전달하고 NSOperationQueue 및 새 가속도계 데이터를 사용할 수있을 때마다 지정된 대기열에서 실행될 블록을 전달하십시오.

4

여기 CoreMotion에서 찾은 유용한 샘플 코드는 this 링크입니다.

@interface ViewController() 

    @property (nonatomic, strong) CMMotionManager *motionManager; 
    @property (nonatomic, strong) IBOutlet UILabel *xAxis; 
    @property (nonatomic, strong) IBOutlet UILabel *yAxis; 
    @property (nonatomic, strong) IBOutlet UILabel *zAxis; 

    @end 

    @implementation ViewController 
    - (void)viewDidLoad 
    { 
     [super viewDidLoad]; 

     self.motionManager = [[CMMotionManager alloc] init]; 
     self.motionManager.accelerometerUpdateInterval = 1; 

     if ([self.motionManager isAccelerometerAvailable]) 
     { 
     NSOperationQueue *queue = [[NSOperationQueue alloc] init]; 
     [self.motionManager startAccelerometerUpdatesToQueue:queue withHandler:^(CMAccelerometerData *accelerometerData, NSError *error) { 
      dispatch_async(dispatch_get_main_queue(), ^{ 
       self.xAxis.text = [NSString stringWithFormat:@"%.2f",accelerometerData.acceleration.x]; 
       self.yAxis.text = [NSString stringWithFormat:@"%.2f",accelerometerData.acceleration.y]; 
       self.zAxis.text = [NSString stringWithFormat:@"%.2f",accelerometerData.acceleration.z]; 
      }); 
      }]; 
     } else 
     NSLog(@"not active"); 
    } 
@end 
1

먼저 CoreMotion 프레임 워크를 프로젝트에 추가하십시오. 그 다음 :

#import <CoreMotion/CoreMotion.h> 

@property (strong, nonatomic) CMMotionManager *motionManager; 

- (void)viewDidLoad { 
    _motionManager = [CMMotionManager new]; 
    _motionManager.accelerometerUpdateInterval = 0.01;  // 0.01 = 1s/100 = 100Hz 
    if ([_motionManager isAccelerometerAvailable]) 
    { 
     NSOperationQueue *queue = [NSOperationQueue new]; 
     [_motionManager startAccelerometerUpdatesToQueue:queue withHandler:^(CMAccelerometerData *accelerometerData, NSError *error){ 
      NSLog(@"X = %0.4f, Y = %.04f, Z = %.04f", 
        accelerometerData.acceleration.x, 
        accelerometerData.acceleration.y, 
        accelerometerData.acceleration.z); 
     }]; 
    } 
} 
관련 문제