我一直在尝试使用6+,使用CoreMotion的新CMAltimeter读取相对高度和压力。但是,回调永远不会触发。我有一个非常相似的设置,而是使用了加速度计,陀螺仪和磁力计。他们似乎一切正常。
想知道外面是否有人设法读书?
- (void)viewDidLoad {
[super viewDidLoad];
if([CMAltimeter isRelativeAltitudeAvailable]){
CMAltimeter *altimeterManager = [[CMAltimeter alloc]init];
[altimeterManager startRelativeAltitudeUpdatesToQueue:[NSOperationQueue mainQueue] withHandler:^(CMAltitudeData *altitudeData, NSError *error) {
// This never fires.
NSString *data = [NSString stringWithFormat:@"Altitude: %f %f", altitudeData.relativeAltitude.floatValue, altitudeData.pressure.floatValue];
NSLog(@"%@", data);
self.altimeterLabel.text = data;
}];
NSLog(@"Started altimeter");
self.altimeterLabel.text = @"-\n-";
} else {
NSLog(@"Altimeter not available");
}
}
我尝试过快速散步,但是这里只有一个关于失去/获得高度的故事。
面对如此巨大的监督,我很尴尬地回答我自己的问题。
在原始帖子中,我在viewDidLoad的范围内声明了CMAltimiter,因此它超出范围并被释放。我将其移动为iVar,然后触发了回调。
#import "ViewController.h"
@import CoreMotion;
@interface ViewController ()
@property (nonatomic, strong) CMAltimeter *altimeterManager;
@end
@implementation ViewController
- (void)viewDidLoad {
[super viewDidLoad];
if([CMAltimeter isRelativeAltitudeAvailable]){
self.altimeterManager = [[CMAltimeter alloc]init];
[self.altimeterManager startRelativeAltitudeUpdatesToQueue:[NSOperationQueue mainQueue] withHandler:^(CMAltitudeData *altitudeData, NSError *error) {
// This now fires properly
NSString *data = [NSString stringWithFormat:@"Altitude: %f %f", altitudeData.relativeAltitude.floatValue, altitudeData.pressure.floatValue];
NSLog(@"%@", data);
self.altimeterLabel.text = data;
}];
NSLog(@"Started altimeter");
self.altimeterLabel.text = @"-\n-";
} else {
NSLog(@"Altimeter not available");
}
}
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句