我正在尝试使用新款iPhone中的气压计传感器来显示设备的垂直速度。我最终在我的"动作"中得到了以下代码。模型,它执行以提供更多或更少的适当值。
然而,在执行startRelativeAltitudeUpdatesToQueue
时,我在更新我的视图方面遇到了问题。 userRelativeAltitude
的值已更新,但该函数从不返回任何内容(可能是因为它正在执行startRelativeAltitudeUpdatesTo Queue
像循环一样工作。?)。我担心整个声明已经结束,而不是我的头脑。
我打算让功能更像是例如startAccelerometerUpdates
。有没有更好的方法从晴雨表收集数据?
另外,如何检查设备是否有可用的气压计传感器?
- (float) pullRelativeAltitude {
self._altitudeManager = [[CMAltimeter alloc] init];
NSOperationQueue *queue = [[NSOperationQueue alloc] init];
[self._altitudeManager startRelativeAltitudeUpdatesToQueue:queue withHandler:^(CMAltitudeData *altitudeData, NSError *error) {
dispatch_async(dispatch_get_main_queue(), ^ {
_userRelativeAltitude = altitudeData.relativeAltitude.floatValue;
NSLog(@"%f", altitudeData.relativeAltitude.floatValue);
});
}];
NSLog(@"This is relative altitude: %f", _userRelativeAltitude is );
return _userRelativeAltitude;
}
建议真的很感激!
答案 0 :(得分:1)
在Swift中,以下代码将检查高度是否可用:
if CMAltimeter.isRelativeAltitudeAvailable() {
// your code
}
但是,我无法获得任何晴雨表读数。
答案 1 :(得分:1)
不确定你是否弄明白,但这对我有用 添加一件事,你可能已经想到了这一点,你不能在模拟器中。您需要iPhone 6或6+,并且应用必须在手机上运行:)
- (void)viewDidLoad {
[super viewDidLoad];
BOOL isReady = [CMAltimeter isRelativeAltitudeAvailable];
if( isReady ) {
NSLog(@"yes");
} else {
NSLog(@"no");
}
alt = [[CMAltimeter alloc] init];
NSOperationQueue *queue = [[NSOperationQueue alloc] init];
[alt startRelativeAltitudeUpdatesToQueue:queue withHandler:^(CMAltitudeData *altitudeData, NSError *error) {
dispatch_async(dispatch_get_main_queue(), ^ {
NSLog(@"%f", altitudeData.relativeAltitude.floatValue);
});
}];
}
答案 2 :(得分:1)
我得到了它的工作,但是我必须在View Controller(而不是模型)中实现代码,以便用新的读取来更新UI。对于其他感兴趣的人,我的最终编码最终看起来像这样:
if ([CMAltimeter isRelativeAltitudeAvailable]) {
self._altitudeManager = [[CMAltimeter alloc] init];
NSOperationQueue *queue = [[NSOperationQueue alloc] init];
[self._altitudeManager startRelativeAltitudeUpdatesToQueue:queue withHandler:^(CMAltitudeData *altitudeData, NSError *error) {
dispatch_async(dispatch_get_main_queue(), ^ {
//provide relative altitude
float relativeAltitude;
relativeAltitude = altitudeData.relativeAltitude.floatValue;
self.userRelativeAltitude.text = [NSString stringWithFormat:@"%.0f m", relativeAltitude];
});
}];
} else {
NSLog(@"barometer not available");
_userVario.text = @"no barometer available";
}
感谢您的回答!