如何在 Swift 中计算“纯”移动距离?
Posted
技术标签:
【中文标题】如何在 Swift 中计算“纯”移动距离?【英文标题】:How calculate "pure" moving distance in Swift? 【发布时间】:2016-05-09 10:49:50 【问题描述】:我编写了计算总行驶距离的应用程序。但我想让这个值更不准确。
我的问题是当我不动时,位置管理器总是更新位置并增加我的总距离 ~ 每秒 1...2 米,水平精度为 10.0。如果我留下/步行/留下,这个距离将每“站立”分钟增加 60...100 米。这对我不利。
我可以使用 Core Motion 框架停止更新位置,并使用 CMMotionManager 检测更改的 x、y、z 轴。当我走路时,这将起作用。但是当我开车时,设备不会改变 x、y、z 轴。
如何计算“纯”移动距离?
【问题讨论】:
朋友,你走错了方向。我也尝试过这个逻辑,但惨遭失败,尝试使用专门为此目的制作的苹果核心运动框架。检查我的答案 【参考方案1】:为pedomter声明一个属性
@property (nonatomic, strong) CMPedometer *pedometer;
像这样初始化它 目前在 iphone 5s 及以上的包含运动传感器芯片的设备中支持这些功能
if ([CMPedometer isStepCountingAvailable])
self.pedometer = [[CMPedometer alloc] init];
else
UIAlertView * alertView=[[UIAlertView alloc] initWithTitle:@"Alert" message:@"Distance calculation is not available on this device!" delegate:nil cancelButtonTitle:@"Ok" otherButtonTitles:nil, nil];
[alertView show];
最后在这个处理程序中获取数据
[self.pedometer startPedometerUpdatesFromDate:[NSDate date]
withHandler:^(CMPedometerData *pedometerData, NSError *error)
dispatch_async(dispatch_get_main_queue(), ^
NSLog(@"data:%@, error:%@", pedometerData, error);
NSLog(@"distance:%@, pedometerData.distance);
NSLog(@"Steps:%@", pedometerData.numberOfSteps);
);
];
别忘了导入 coremotion 框架
【讨论】:
谢谢回答。我希望 CMPedometer 类也支持驾驶汽车活动(不仅仅是步行和跑步活动) 对于使用此类 developer.apple.com/library/ios/documentation/CoreMotion/… 的准确性不适用,这是专门为运动类型制作的以上是关于如何在 Swift 中计算“纯”移动距离?的主要内容,如果未能解决你的问题,请参考以下文章
如何更新显示的 ETA 和距离值? Swift 4 MKDirections MapKit
翻译: Swift 中的委托保留周期 如何在“纯”Swift(没有@objc)中进行弱协议引用