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