【问题标题】:WatchKit and GeolocationWatchKit 和地理定位
【发布时间】:2015-02-03 00:48:25
【问题描述】:

我正在为 Swift 上的 Apple Watch 编写应用程序。我的目标是创建一种导航器,它可以显示您当前位置和地图上某个点之间的距离。目前我正在尝试获取当前位置并将其显示在屏幕上,但不幸的是代码不起作用。

这是 InterfaceController.swift 文件的代码。

class InterfaceController: WKInterfaceController, CLLocationManagerDelegate {

    @IBOutlet weak var lblLocationDisplay: WKInterfaceLabel!;

    let locationManager = CLLocationManager();

    override func awakeWithContext(context: AnyObject?) {
        super.awakeWithContext(context)

        // Configure interface objects here.
    }

    override func willActivate() {
        // This method is called when watch view controller is about to be visible to user
        super.willActivate()
    }

    override func didDeactivate() {
        // This method is called when watch view controller is no longer visible
        super.didDeactivate()
    }
    @IBAction func btnFindLocation() {
        locationManager.delegate = self;
        locationManager.desiredAccuracy = kCLLocationAccuracyBest;
        locationManager.requestWhenInUseAuthorization();
        locationManager.startUpdatingLocation();

    }

    func locationManager(manager: CLLocationManager!, didUpdateLocations locations: [AnyObject]!) {
        CLGeocoder().reverseGeocodeLocation(manager.location, completionHandler: {(placemarks, error) -> Void in
            println("Something");
                let placeMarks = placemarks[0] as CLPlacemark;
                self.displayLocation(placeMarks);

        });
    }

    func displayLocation(placemark: CLPlacemark) {
//        locationManager.stopUpdatingLocation();
        println(placemark.country);
        let locality = placemark.locality;
        let postalCode = placemark.postalCode;
        let administrativeArea = placemark.administrativeArea;
        let country = placemark.country;

        lblLocationDisplay.setText("Locality: \(locality) PostalCode: \(postalCode) Area: \(administrativeArea) Country: \(country)");
    }
}

这里是project

请分享您对代码不起作用的原因的建议。我也希望你能建议我如何在手表中实现一个导航器应用程序。谢谢!

【问题讨论】:

    标签: swift ios8 geolocation watchkit


    【解决方案1】:

    要获取当前用户位置,您应该按照以下步骤操作: - 将 CoreLocation 框架添加到 IOS 应用程序的库中。 - 在 IOS app 的支持文件夹和 info.plist 文件中,您应该添加两行名称: NSLocationWhenInUseDescription 和值你可以设置“知道你的位置!!” 和另一行: NSLocationAlwaysUsageDescription 和值您可以设置“始终使用位置!” - 现在导入 CoreLocation 以查看 controller.swift 并添加 CLLocationDelegate 的委托。

    现在在 watchkit 扩展中,你应该也导入 CoreLocation 和 CLLocationManager Delegate 并在 awakeWithContext 中执行此步骤:

    //Make a new locationManager variable:
    
    var locationManager = CLLocationManager()
            //        set delegate
            locationManager.delegate = self
            //        Set desiredAccuracy using a GPS of IP:
            locationManager.desiredAccuracy = kCLLocationAccuracyBest
    
            //        request to use location
    
            locationManager.requestAlwaysAuthorization()
            //        start update location
            locationManager.startUpdatingLocation()
    

    之后您编写 CLLocationManagerDelegate:

    // MARK: CLLocationManagerDelegate
    
        func locationManager(manager: CLLocationManager!, didUpdateLocations locations: [AnyObject]!) {
    
            println(locations)
        }
    

    请注意,您首先运行您的 IOS 应用程序接受获取用户的位置,然后您可以运行 Watchkit 方案来获取当前用户位置。

    【讨论】:

    • “将 CoreLocation 框架添加到 IOS 应用程序之外的库中” - 抱歉,我应该在哪里添加这个?我有 4 个 info.plist) “并添加 CLLocationDelegate 的代表” - 应该是这样的“var delegate: CLLocationManagerDelegate?”?我有点困惑(
    • 我不知道为什么,但应用程序没有在模拟器上运行。
    【解决方案2】:

    您需要在使用时使用请求始终访问而不是请求。有关在 WatchKit 扩展中使用 CLLocationManger 的更多信息,请参阅这篇文章 How to calculate current location in WatchKit extension

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2015-11-28
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多