11

UIAccelerotmeterDelegateメソッドを使用していaccelerometer:didAccelerate:ますが、最近そのメソッドは iOS 5.0 で非推奨になりました。では、加速度計のデータを取得する別の方法は何ですか? ドキュメントには、使用することになっている代替手段については言及されていません。

4

6 に答える 6

13

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

于 2012-04-16T09:46:35.957 に答える
5

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

ここで答えを見つけることができます:

accelerometer:didAccelerate: が IOS5 で非推奨になったのはなぜですか?

役に立てば幸いです。

于 2012-04-16T09:45:29.833 に答える
4

これは、このリンクから CoreMotion で見つけた便利なサンプル コードです。

    @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
于 2014-11-14T23:59:47.870 に答える
3

に置き換えられCoreMotionます。モーション イベントを参照してください。

于 2012-04-16T09:48:12.757 に答える
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);
         }];
    }
}
于 2015-06-27T10:17:33.777 に答える