Я использую метод UIAccelerotmeterDelegate
accelerometer:didAccelerate:
, но недавно этот метод устарел в iOS 5.0. Итак, каков альтернативный способ получить данные акселерометра? В документации не упоминается альтернатива, которую мы должны использовать.
Как получить данные акселерометра в IOS?
Ответ 1
В качестве замены вы должны использовать Framework Core Motion (представленный в iOS 4.0). Создайте экземпляр CMMotionManager
и сообщите его startAccelerometerUpdatesToQueue:withHandler:
, передав ему NSOperationQueue
и блок, который будет выполняться в указанной очереди всякий раз, когда доступны новые данные акселерометра.
Ответ 2
Кажется, что UIAccelerometer и UIAccelerometerDelegate были заменены каркасом CoreMotion.
Здесь вы можете найти ответ:
Почему акселерометр: didAccelerate: устарел в IOS5?
Надеюсь, что это поможет.
Ответ 3
Вот полезный пример кода, который я нашел для 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
Ответ 4
Его заменили на CoreMotion
. См. События движения.
Ответ 5
Сначала добавьте инфраструктуру 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);
}];
}
}