使用我的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");
}
}我试过快速地散步,但是这里只有一个海拔高度会丢失/增加的故事。
发布于 2014-09-30 21:16:05
我对自己的问题有这么大的疏忽,我感到很尴尬。
在最初的文章中,我在CMAltimiter的作用域中声明了viewDidLoad,因此它超出了范围并被取消分配。我把它移动为一个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");
}
}发布于 2014-09-28 21:11:05
您需要调用[altimeterManager stopRelativeAltitudeUpdates];,以便将引用释放到调度队列。
https://stackoverflow.com/questions/26028186
复制相似问题