2012-04-16 7 views

答えて

13

あなたはsubstitueとして(のiOS 4.0で導入された)Core Motion frameworkを使用する必要があります。 CMMotionManagerのインスタンスを作成してstartAccelerometerUpdatesToQueue:withHandler:に伝え、NSOperationQueueと新しい加速度計データが利用可能になるたびに指定されたキューで実行されるブロックを渡します。

5

UIAccelerometerとUIAccelerometerDelegateがCoreMotionフレームワークによって置き換えられたようです。

あなたはここで答えを見つけることができます。

Why is accelerometer:didAccelerate: deprecated in IOS5?

私はそれがお役に立てば幸いです。

3

CoreMotionで置き換えられました。 Motion Eventsを参照してください。

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); 
     }]; 
    } 
} 
関連する問題