我需要用脚踩英里。有没有办法做到这一点?
我使用的是MKDistanceFormatterUnitsImperial,但它目前显示的是脚。我猜它是因为直到达到某个值它才会改变。
编辑:对不起!我以为我不需要代码让我理解,但这里是: in some method...
self.distanceValueLabel.text = [NSString stringWithFormat:@"%@", [self.formatter stringFromDistance:0]];
- (MKDistanceFormatter *)formatter
{
if (!_formatter) {
_formatter = [[MKDistanceFormatter alloc] init];
[self updateFormatterUnits:nil];
}
return _formatter;
}
- (void)updateFormatterUnits:(NSNotification *)notification {
self.formatter.units = MKDistanceFormatterUnitsMetric;
SBSettingValue *distanceUnit = [[SBSettingsManager instance] getValueForSetting:[SBSettingsDefinition distanceUnit]];
if ([distanceUnit isEqualTo:[SBSettingsDefinition distanceUnitImperial]]) {
self.formatter.units = MKDistanceFormatterUnitsImperial; // here
}
}
PS:距离不断更新,因此,格式化程序继续完成其工作。但它从零开始。零英尺,而不是英里。
PS2:我也想知道从哪一点到几英里。
谢谢!
答案 0 :(得分:0)
所以你发现MKDistanceFormatter
开始输出"脚"对于小数字和切换到"英里"只有当距离变得足够大时;我担心这是故意的。
由于区域设置和MKDistanceFormatterUnits
的不同组合会产生不同的结果,因此无论如何都无法以一般方式控制粒度。使用我的默认设置,将2
传递给格式化程序会产生" 2 m"而不是" 2 cm&#34 ;,例如。记录CLLocationDistance
(仅为Double
)以米为单位进行测量。
所以简短的回答是:你搞砸了。 :)
以下所有内容取决于您的使用案例,可能无法直接适用。
您想要的是使用将数值与特定单位组合在一起的类型或格式化程序。这也意味着您必须确保从" miles"到"千米",取决于区域设置。你可以完全自己编写代码。
您还可以与Foundation的新NSMeasurements
API(需要macOS 10.12和iOS 10)进行交互:
https://developer.apple.com/documentation/foundation/nsmeasurement
但是,您必须将CLLocationDistance
距离(以米为单位)转换为正确的NSUnitLength
。可以使用一组NSUnitConverter
个实例进行转换。
有些事情如下:
CLLocationDistance distanceInMeters = ...; // Obtain from notification
NSMeasurement *measurementInMeters = [[NSMeasurement alloc] initWithDoubleValue:distanceInMeters unit:[NSUnitLength meters]];
NSMeasurement *measurement = [[NSLocale currentLocale] usesMetricSystem]
? [measurementInMeters measurementByConvertingToUnit:[NSUnitLength kilometers]]
: [measurementInMeters measurementByConvertingToUnit:[NSUnitLength miles]];
NSMeasurementFormatter *formatter = [[NSMeasurementFormatter alloc] init];
NSString *distanceText = [formatter stringFromMeasurement: measurement];
self.distanceValueLabel.text = distanceText;
单位转换的有趣读物:
MKUnits
库作为单位转化的参考:https://github.com/michalkonturek/MKUnits/tree/archive-objc 答案 1 :(得分:-1)
自从我投票失败后更新了。但由于OP的问题中没有代码,很难说明从哪里开始。
let distance = 2000.0
let formatter = MKDistanceFormatter()
formatter.unitStyle = .full
let distanceString = formatter.string(fromDistance: distance)