2011-12-19 18 views
10

私は2つのCLLocationオブジェクトを持っており、それらの間の距離を素敵できれいな形式で表示したいと思います。 「22フィート」、「58ヤード」、または「2.3マイル」Pretty Print iOSの距離

CLLocation *location1 = [[CLLocation alloc] initWithLatitude:42.333297 longitude:-71.588858]; 
CLLocation *location2 = [[CLLocation alloc] initWithLatitude:42.353297 longitude:-71.578858]; 

float target = [location1 getDistanceFrom:location2]; 

のように基本的には、かなりの文字列までの距離を変換することができますか私はこれを手動で行う必要がありますiOSのライブラリ内のものはありますか?

答えて

12

残念ながら、手動で行う必要があります。

そして、あなたがそうするかどうかをチェックすることを忘れないでください:

[[[NSLocale currentLocale] objectForKey:NSLocaleUsesMetricSystem] boolValue] 

世界の残りの部分には理解されます。

//distance to 2 decimal places 
NSString *target = [NSString stringWithFormat:@"%.2f miles", distance]; 

をしかし、距離測定またはそのようなものとの間の変換のための機能はありません。

+0

これはもう真実ではありません。アレキサンダーの答えを見てください。 – xytor

0

あなたはこれを達成するために、文字列の書式を使用することができます。

4

TTTLocationFormatterFormatterKitが正確にあなたが探しているものかもしれません。そうでない場合は、おそらくそれを出発点として使用することができます。

42

iOSの7(およびOS X 10.9)を使用すると、必要な正確に何をしても、そのMKDistanceFormatterを導入しました:

CLLocationDistance distance = 1320.0; 
MKDistanceFormatter *df = [[MKDistanceFormatter alloc]init]; 
df.unitStyle = MKDistanceFormatterUnitStyleFull; 

NSString *prettyString = [df stringFromDistance:distance]; 

スウィフトバージョン:

let distance = 1320.0 
let df = MKDistanceFormatter() 
df.unitStyle = .Full 

let prettyString = df.stringFromDistance(distance) 
15

を私はただ注意したい、と同様に、そのiOS8のリリースは、正確にこの種の問題のために新しいNSFormattersになります。

非常に使いやすいNSLengthFormatter,NSMassFormatterおよびNSEnergyFormatterがあります - iOS8 NSFormatter tutorialを参照してください。ここでは迅速でLengthFormatterを使用した例である。たDateFormatterと同様

let lengthFormatter = LengthFormatter() 
print("Kilometer: ", lengthFormatter.string(fromValue:1000, unit: .kilometer)) //Kilometer: 1,000 km 

、あなたは、もはや必ずしもユニット自体を印刷するためのNSLocaleを使用する必要はありません。

+0

Klaasがこの回答の1年近く前に述べたように、[MKDistanceFormatter](https://developer.apple.com/library/ios/documentation/MapKit/Reference/MKDistanceFormatter_class/)はiOS 7で追加されました。目的。 –

+2

'NSLengthFormatter'は、距離を除いてメトリックシステムを使用するロケールに対して正しい出力を与えずに、数値の書式設定に優れたオプションを提供します。残念ながら、 'MKDistanceFormatter'は数値の書式設定オプションを提供せず、数値を丸めて表示します。 – ThomasW