你需要做两件事
- 获取当前位置
- 使用 lat、long 打开 UIActivityController
要获取当前位置为 lat, long 可以使用 CLCoordinate
首先将这些添加到您的 info.plist 中,您可以随意修改文本
<key>NSLocationAlwaysUsageDescription</key>
<string>Will you allow this app to always know your location?</string>
<key>NSLocationWhenInUseUsageDescription</key>
<string>Do you allow this app to know your current location?</string>
<key>NSLocationAlwaysAndWhenInUseUsageDescription</key>
<string>Do you allow this app to know your current location?</string>
现在在你的类中创建一个 CLLocationManager 对象并实现它的委托,因为 CLLocationManager 在 CoreLocation 我们需要导入它
import CoreLocation
现在创建一个 locationManager 的对象
let locationManager = CLLocationManager()
现在在 viewDidload 中,或者您甚至可以创建一个单独的方法,添加以下代码来设置 locationManager
locationManager.delegate = self
locationManager.desiredAccuracy = kCLLocationAccuracyBest
locationManager.requestAlwaysAuthorization()
if CLLocationManager.locationServicesEnabled(){
locationManager.startUpdatingLocation()
}
现在实现它的委托并获取坐标
func locationManager(_ manager: CLLocationManager, didUpdateLocations locations: [CLLocation]) {
let userLocation :CLLocation = locations[0] as CLLocation
let coordinates = userLocation!.coordinate
print("locations = \(coordinates.latitude) \(coordinates.longitude)")
}
现在您可以调用以下函数来打开操作表
if let shareObject = self.activityItems(latitude: lat, longitude: long) {
//open UIActivityViewController
}
使用此方法构造vCard进行分享
func activityItems(latitude: Double, longitude: Double) -> [AnyObject]? {
var items = [AnyObject]()
let locationTitle = "Shared Location"
let URLString = "https://maps.apple.com?ll=\(latitude),\(longitude)"
if let url = NSURL(string: URLString) {
items.append(url)
}
let locationVCardString = [
"BEGIN:VCARD",
"VERSION:3.0",
"PRODID:-//Joseph Duffy//Blog Post Example//EN",
"N:;\(locationTitle);;;",
"FN:\(locationTitle)",
"item1.URL;type=pref:\(URLString)",
"item1.X-ABLabel:map url",
"END:VCARD"
].joinWithSeparator("\n")
guard let vCardData = locationVCardString.dataUsingEncoding(NSUTF8StringEncoding) else {
return nil
}
let vCardActivity = NSItemProvider(item: vCardData, typeIdentifier: kUTTypeVCard as String)
items.append(vCardActivity)
items.append(locationTitle)
return items
}
参考链接:https://josephduffy.co.uk/posts/ios-share-sheets-the-proper-way-locations