2011-12-19 18 views
10

Mam dwa obiekty CLLocation i chciałbym pokazać odległość między nimi w ładnym i ładnym formacie. Podobnie jak „22 stóp”, „58 jardów” lub „2,3 mili”Ładne odległości drukowania dla 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]; 

Zasadniczo, jest tam coś w bibliotece iOS, które można przekształcić odległość do ładnego łańcucha czy też muszę to zrobić ręcznie?

Odpowiedz

12

Niestety, musisz to zrobić ręcznie.

A jeśli nie tak, proszę nie zapomnij sprawdzić:

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

Reszta świata będzie wdzięczna.

+0

To już nie jest prawda. Zobacz odpowiedź Aleksandra. – xytor

0

Można użyć formatowania ciągów do osiągnięcia tego celu:

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

Ale nie ma funkcji do konwersji pomiędzy pomiarami odległość lub coś podobnego.

42

iOS 7 (i OS X 10.9) wprowadziła MKDistanceFormatter że robi dokładnie to, czego potrzebujesz:

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

NSString *prettyString = [df stringFromDistance:distance]; 

wersję SWIFT:

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

let prettyString = df.stringFromDistance(distance) 
15

Chciałem tylko zwrócić uwagę, że, podobnie jak w wydanie iOS8 będzie nowy NSFormatters dla dokładnie tego rodzaju problemu.

Nie będzie NSLengthFormatter, NSMassFormatter i NSEnergyFormatter które są bardzo łatwe w obsłudze - zobacz ten iOS8 NSFormatter tutorial. Oto przykład z użyciem LengthFormatter SWIFT:

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

Podobnie jak dateFormatter, nie będzie już koniecznie trzeba używać NSLocale do drukowania samą jednostkę.

+0

Jak zauważył Klaas prawie rok przed tą odpowiedzią, [MKDistanceFormatter] (https://developer.apple.com/library/ios/documentation/MapKit/Reference/MKDistanceFormatter_class/) została dodana w systemie iOS 7 i jest dokładnie dostosowana do tego cel, powód. –

+2

'NSLengthFormatter' daje lepsze opcje formatowania wartości liczbowej, nie dając prawidłowego wyniku dla ustawień regionalnych, w których używają systemu metrycznego, z wyjątkiem odległości. 'MKDistanceFormatter' niestety nie daje ci opcji formatowania liczbowego i wydaje się zaokrąglać wartość liczbową. – ThomasW

Powiązane problemy