2011-12-19 13 views
10

के लिए सुंदर प्रिंट डिस्टेंस मेरे पास दो सीएलएलोकेशन ऑब्जेक्ट्स हैं और मैं उनके बीच एक अच्छा और सुंदर प्रारूप में दूरी को दिखाना चाहता हूं। "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]; 

मूल रूप से की तरह, वहाँ आईओएस पुस्तकालय में कुछ भी है कि एक सुंदर स्ट्रिंग के लिए एक दूरी परिवर्तित कर सकते हैं या मैं इस मैन्युअल रूप से मुझे क्या करना होगा है?

उत्तर

12

दुर्भाग्य से, आपको इसे मैन्युअल रूप से करना होगा।

और अगर आप ऐसा करते हैं, मत भूलना कृपया जाँच करने के लिए:

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

दुनिया के बाकी हिस्सों की सराहना करेंगे।

+0

यह अब सत्य नहीं है। कृपया अलेक्जेंडर का जवाब देखें। – xytor

0

इसे पूर्ण करने के स्ट्रिंग स्वरूपण का उपयोग कर सकते हैं:

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

लेकिन वहाँ दूरी माप या ऐसा कुछ के बीच परिवर्तित करने के लिए कोई सुविधा है।

4

TTTLocationFormatterFormatterKit से ठीक वही हो सकता है जो आप खोज रहे हैं। यदि ऐसा नहीं है तो आप शायद इसे शुरुआती बिंदु के रूप में उपयोग कर सकते हैं।

42

iOS 7 (और ओएस एक्स 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

मैं सिर्फ नोट करने के लिए, कि, के साथ के रूप में करना चाहता था की रिलीज आईओएस 8 इस तरह की समस्या के लिए नया NSFormatters होगा।

होगा NSLengthFormatter, NSMassFormatter और NSEnergyFormatter जो उपयोग करने के लिए बहुत आसान कर रहे हैं - इस iOS8 NSFormatter tutorial देखते हैं। यहाँ स्विफ्ट के साथ LengthFormatter का उपयोग कर एक उदाहरण है:

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

DateFormatter साथ की तरह, तुम अब जरूरी इकाई अपने आप में मुद्रण के लिए NSLocale का उपयोग करना होगा।

+0

जैसा कि क्लास ने इस उत्तर से लगभग एक साल पहले उल्लेख किया था, [एमकेडिस्टेंसफॉर्मेटर] (https://developer.apple.com/library/ios/documentation/MapKit/Reference/MKDistanceFormatter_class/) आईओएस 7 में जोड़ा गया था और इसके लिए बिल्कुल उपयुक्त है उद्देश्य। –

+2

'NSLengthFormatter' संख्यात्मक मान के स्वरूपण के लिए बेहतर विकल्प देता है, जबकि स्थानीय लोगों के लिए सही आउटपुट नहीं दे रहा है जहां वे दूरी के अलावा मेट्रिक सिस्टम का उपयोग करते हैं। दुर्भाग्यवश 'MKDistanceFormatter' आपको संख्यात्मक स्वरूपण विकल्प नहीं देता है और संख्यात्मक मान के दौर में दिखाई देता है। – ThomasW