2015-10-11 1 views
1

Я знаю, как делиться другими объектами, такими как изображения, URL-адреса, строки или другие. Но я не знаю, как я могу поделиться с UIActivityViewController текущим местоположением. Я попробовалКак обмениваться местоположением пользователя с UIActivityViewController в Xcode

@IBAction func sendLocation(sender: UIBarButtonItem) { 
    if mapView.userLocationVisible { 
     let currentCoordinate = mapView.userLocation.location! 
     print(currentCoordinate) 
     let arrayLocation = [currentCoordinate] 

     let activityController = UIActivityViewController(activityItems: arrayLocation, applicationActivities: nil) 
     presentViewController(activityController, animated: true, completion: nil) 
    } else { 
     print("User location is not visible") 
    } 
} 

Но я вижу в консоли < + 53.09618071 + +49,96449468> +/- 20.00m (скорость 0.00/MPS курс -1,00) @ 10/11/15, 1:54:26 PM Самара Стандартное время. UIActivityViewController не имеет общего местоположения. Пожалуйста, помогите мне.

+0

Вы не можете просто поделиться CLLocation - вы можете поделиться текстом, который представляет широту и долготу. Вы можете поделиться изображением карты с указанием местоположения ... – Paulw11

+0

Я хочу сделать это, когда вы отправляете местоположение, другой пользователь может открыть это местоположение на карте и построить маршрут. @ Paulw11 – Alexander

ответ

1
 @IBAction func shareLocation(sender: UIBarButtonItem) { 
//  print(receivedDictionary) 
     let postalAdress = CNMutablePostalAddress() 
     postalAdress.street = receivedDictionary["Name"] as! String 
     postalAdress.city = receivedDictionary["City"] as! String 
     postalAdress.state = receivedDictionary["State"] as! String 
     postalAdress.postalCode = receivedDictionary["ZIP"] as! String 
     postalAdress.country = receivedDictionary["Country"] as! String 
     postalAdress.ISOCountryCode = receivedDictionary["CountryCode"] as! String 

     let streetName = receivedDictionary["Name"] as! String 

     let urlAddress = receivedDictionary["FormattedAddressLines"] as! [String] 
//  print(urlAddress) 
     let postalContact = CNLabeledValue(label: streetName, value: postalAdress) 
     let urlAddressContact = CNLabeledValue(label: "map url", value: "http://maps.apple.com/maps?address=\(urlAddress.description)") 

     let contact = CNMutableContact() 
     contact.contactType = .Organization 
     contact.organizationName = streetName 
     contact.departmentName = streetName 
     contact.postalAddresses = [postalContact] 
     contact.urlAddresses = [urlAddressContact] 

     // create path 

     let directory = fileManager.URLsForDirectory(.DocumentDirectory, inDomains: .UserDomainMask) 

     let path = directory.first!.path!.stringByAppendingString("/\(streetName).loc.vcf") 
//  print(path) 

     do { 
      let contactData = try CNContactVCardSerialization.dataWithContacts([contact]) 

      contactData.writeToFile(path, atomically: true) 

      let url = NSURL(fileURLWithPath: path) 
//   print(url) 
      let activityViewController = UIActivityViewController(activityItems: [url], applicationActivities: nil) 
      presentViewController(activityViewController, animated: true, completion: nil) 
     } catch { 
      print("CNContactVCardSerialization cannot save address") 
     } 
    } 
+0

Где вы получили 'receivedDictionary'? – oyalhi

+0

@oyalhi в другом классе – Alexander

+0

Я понял, что это похоже на жизненно важную часть функции. То, что я закончил, - это прямое обращение к http и открытие связанного приложения, если он не откроет связанную веб-страницу. 'let googleString =" https://www.google.com/maps/place/Starbucks/@32.6864286,-117.1821824,17z/data=!3m1!4b1!4m2!3m1!1s0x80deacc97a19561b:0xf12ab2d5340288f2 " если пусть URL = NSURL (строка: googleString) { UIApplication.sharedApplication(). OpenURL (URL) } 'Достаточно хорошо для моего дела. GoogleString - это прямая копия с веб-страницы. – oyalhi