2015-06-20 39 views
3

我使用NSLengthFormatter类来格式化用户和某个目标之间的距离。NSLengthFormatter get stringFromMeters:以英里/公里为单位

CLLocation *userLocation; //<- Coordinates fetched from CLLocationManager 
CLLocation *targetLocation; //<- Some location retrieved from server data 

CLLocationDistance distance = [userLocation distanceFromLocation:targetLocation]; 

NSLengthFormatter *lengthFormatter = [NSLengthFormatter new]; 
NSString *formattedLength = [lengthFormatter stringFromMeters:distance]; 

现在,如果长度小于1000米,格式化的距离总是以码或米(取决于语言环境)显示。

例如,如果距离= 450.0,格式化的字符串将是492.7码或450米。

如何调整NSLengthFormatter以仅返回英里/公里的距离字符串?

+0

你有没有试过设置一个不同的'numberFormatter'并且使用[NSNumberFormatter]的不同属性(https:/ /developer.apple.com/library/prerelease/mac/documentation/Cocoa/Reference/Foundation/Classes/NSNumberFormatter_Class/index.html#//apple_ref/doc/c_ref/NSNumberFormatter) – luk2302

+0

是的,我做过。我曾尝试设置小数位数和舍入模式的数量,但没有对测量输出产生影响。我仍在浏览房产,但希望有人已经实现了同样的目标。 – ZeMoon

+0

请参阅[这个答案](http://stackoverflow.com/questions/2324125/objective-c-string-formatter-for-distances)。 – Droppy

回答

3

似乎没有办法选择退出此行为。说实话,从UX的角度来看,你的要求并不常见。

请注意,meter是基本单位,而不是kilometer(千米)。通常,显示10 meters比显示0.01 kilometers更受欢迎。这对用户来说更加友好。

实际上很难设计一个API来强制执行特定的单元,因为基本单元取决于当前的语言环境。

可以使用强制特定单位:

- (NSString *)unitStringFromValue:(double)value unit:(NSLengthFormatterUnit)unit; 

,但你必须处理的区域设置和扩展自己&单位换算(见Objective c string formatter for distances

+1

这就是我所做的。检查答案。你是对的,这个要求不是很常见。然而,我的客户并不喜欢在码场出现距离。在拥有帝国制度的国家,我确信人们看到以米为单位的距离是没有问题的。 – ZeMoon

+1

@ZeMoon在美国很多人根本不了解公制系统:) – Sulthan

+0

在地图上以及在路上的距离总是以公里为单位(当使用公制时),所以这实际上是一个非常普遍的要求。 – lenooh

7

这是我已经结束了使用:

-(NSString *)formattedDistanceForMeters:(CLLocationDistance)distance 
{ 
    NSLengthFormatter *lengthFormatter = [NSLengthFormatter new]; 
    [lengthFormatter.numberFormatter setMaximumFractionDigits:1]; 

    if ([[[NSLocale currentLocale] objectForKey:NSLocaleUsesMetricSystem] boolValue]) 
    { 
     return [lengthFormatter stringFromValue:distance/1000 unit:NSLengthFormatterUnitKilometer]; 
    } 
    else 
    { 
     return [lengthFormatter stringFromValue:distance/1609.34 unit:NSLengthFormatterUnitMile]; 
    } 
} 
+4

不错,谢谢。我尊敬地不同意Sulthan--在地图应用中,我认为你确实想要坚持一个单元,以便用户不必在头上进行转换。那家餐馆距离20英里,或者说是0英里。3英里远 - 不要显示脚或码,非常感谢。 :) – SimplGy

相关问题