如何在 Xcode 中从 UIActivityViewController 共享用户位置

Posted

技术标签:

【中文标题】如何在 Xcode 中从 UIActivityViewController 共享用户位置【英文标题】:How to share user location from UIActivityViewController in Xcode 【发布时间】:2015-10-11 09:57:38 【问题描述】:

我知道如何共享其他对象,例如图像、网址、字符串或其他。但我不知道如何从UIActivityViewController 分享当前位置。 我试过了

    @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")
    

但我在控制台中看到 +/- 20.00m(速度 0.00 mps / 路线 -1.00)@ 2015 年 10 月 11 日,萨马拉标准时间下午 1:54:26强>。 UIActivityViewController 不共享任何位置。请帮帮我。

【问题讨论】:

您不能简单地共享一个 CLLocation - 您可以共享代表纬度和经度的文本。您可以分享显示位置的地图图像... 我想在发送位置时,其他用户可以在地图中打开该位置并建立路线。 @Paulw11 【参考方案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")
        
    

【讨论】:

你从哪里得到receivedDictionary @oyalhi 在其他班级 我认为是的,但它似乎是该功能的重要组成部分。我最终做的是直接调用http,如果安装它会打开相关的应用程序,如果没有它会打开相关的网页。 let googleString = "https://www.google.com/maps/place/Starbucks/@32.6864286,-117.1821824,17z/data=!3m1!4b1!4m2!3m1!1s0x80deacc97a19561b:0xf12ab2d5340288f2" if let URL = NSURL(string: googleString) UIApplication.sharedApplication().openURL(URL) 我现在的情况已经足够好了。 googleString 是从网页直接复制的。 @oyalhi 我理解你

以上是关于如何在 Xcode 中从 UIActivityViewController 共享用户位置的主要内容,如果未能解决你的问题,请参考以下文章

如何在 Xcode 中从管理器中删除应用程序?

如何在构建设置中从 xcode 7.2 中删除配置文件

如何在 xcode 中从控制器外部更新视图

如何在 xcode (swift) 中从 Json Schema / Json 生成模型对象?

在 XCode 中从 Objective-C 访问 JavaScript 变量

在 XCode 4.3 中从命令行构建时链接任意库