Красивые расстояния печати для iOS - PullRequest
11 голосов
/ 20 декабря 2011

У меня есть два объекта CLLocation, и я хотел бы показать расстояние между ними в хорошем и красивом формате.Например, «22 фута», «58 ярдов» или «2,3 мили»

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 что-либо, что может преобразовать расстояние в красивую строку, или я должен это сделать?вручную?

Ответы [ 5 ]

44 голосов
/ 26 ноября 2013

iOS 7 (и OS X 10.9) представили MKDistanceFormatter , который делает именно то, что вам нужно:

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

NSString *prettyString = [df stringFromDistance:distance];

Swift версия:

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

let prettyString = df.stringFromDistance(distance)
18 голосов
/ 09 сентября 2014

Я просто хотел отметить, что, как и с выпуском iOS8 , будут новые NSFormatters именно для такого рода проблемы.

Там будет NSLengthFormatter,NSMassFormatter и NSEnergyFormatter, которые очень просты в использовании - см. Это руководство по iOS8 NSFormatter .Вот пример использования LengthFormatter с swift:

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

Как и в случае с DateFormatter, вам больше не нужно будет использовать NSLocale для печати самого устройства.

12 голосов
/ 20 декабря 2011

К сожалению, вы должны сделать это вручную.

И если вы это сделаете, пожалуйста, не забудьте проверить:

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

Остальной мир будет признателен.

4 голосов
/ 20 декабря 2011

TTTLocationFormatter из FormatterKit может быть именно тем, что вы ищете.Если это не так, вы можете использовать его в качестве отправной точки.

0 голосов
/ 20 декабря 2011

Для этого можно использовать форматирование строки:

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

Но нет функции для преобразования измерений расстояния или чего-либо подобного.

...