使用Xcode的SWIFT三送从OSX /可可应用程序的当前位置

问题描述 投票:-1回答:1

我不为它提供一个代码表示歉意。我之所以用图像贴吧,因为Xcode是LLVM(低级虚拟机)编译器,大多UI环境,尤其是对配置部分。如通过将它们拖动到视图控制器代替由代码直接定义它创建用于任意物体的出口或动作。因此,因为它是如此,我认为人们会很容易发现我的错误更快。

import Cocoa
import MapKit

class ViewController: NSViewController, CLLocationManagerDelegate {

   @IBOutlet var mapView: MKMapView!
   var locManager = CLLocationManager()
   var currentLocation = CLLocation()

   var locationManager = CLLocationManager()
   var didFindMyLocation = false
   var strForCurLatitude = "";
   var strForCurLongitude = "";

   override func viewDidLoad() {
       super.viewDidLoad()

       let distancespan:CLLocationDegrees = 2000
       let busCScampuslocation:CLLocationCoordinate2D =  CLLocationCoordinate2DMake(currentLocation.coordinate.latitude, currentLocation.coordinate.longitude)
       mapView.setRegion(MKCoordinateRegion.init(center: bsuCScampuslocation, latitudinalMeters: distancespan, longitudinalMeters: distancespan), animated: true)
       print(currentLocation.coordinate.latitude)
   }
   ...
}
xcode cocoa swift3 mapkit
1个回答
0
投票

斯威夫特5:

ViewController.swift

import Cocoa
import CoreLocation
import MapKit

class ViewController: NSViewController, CLLocationManagerDelegate {

       let manager = CLLocationManager()

       override func viewDidLoad() {
           super.viewDidLoad()
           manager.delegate = self
           manager.startUpdatingLocation()
       }

       func locationManager(_ manager: CLLocationManager, didUpdateLocations locations: [CLLocation]) {
            print(locations)
            //This is where you can update the MapView when the computer is moved (locations.last!.coordinate)
       }

       func locationManager(_ manager: CLLocationManager, didFailWithError error: Error) {
            print(error)
       }

       func locationManager(_ manager: CLLocationManager,
                     didChangeAuthorization status: CLAuthorizationStatus) {
           print("location manager auth status changed to: " )
           switch status {
               case .restricted:
                    print("restricted")
               case .denied:
                    print("denied")
               case .authorized:
                    print("authorized")
               case .notDetermined:
                    print("not yet determined")
               default:
                    print("Unknown")
       }

}

添加这些行的info.plist或设置NSLocationAlwaysAndWhenInUseUsageDescription和/(或?)NSLocationUsageDescription来的,为什么你需要访问的用户位置的纯文本的描述

    <key>NSLocationAlwaysAndWhenInUseUsageDescription</key>
        <string>Allows us to locate you</string>
    <key>NSLocationUsageDescription</key>
        <string>Allows us to locate you</string>

如果用户位置信息服务,授权状态会被“拒绝”


1
投票

我表现出的ios演示,希望能帮助你。首先利用委托和定义CLLocationManager

CLLocationManagerDelegate
var locManager:CLLocationManager?;

然后这样做:

    self.locManager = CLLocationManager();//[[CLLocationManager alloc] init];
    self.locManager!.delegate = self;
    self.locManager!.desiredAccuracy = kCLLocationAccuracyBest;
    self.locManager!.distanceFilter = 5.0;
    //ios8 later have effect
    self.locManager?.requestWhenInUseAuthorization();// front use
    self.locManager?.startUpdatingLocation();

最后,可以得到的数据:

func locationManager(manager: CLLocationManager!, didUpdateToLocation newLocation: CLLocation!, fromLocation oldLocation: CLLocation!) {
    println("latitude %g",newLocation.coordinate.latitude);
    println("longitude %g",newLocation.coordinate.longitude);
}

func locationManager(manager: CLLocationManager!, didFailWithError error: NSError!) {

    println("locationManager error");

}

最后但并非最不重要的,在info.plist中应该补充一点:

NSLocationWhenInUseUsageDescription,set YES

希望能帮助你。

© www.soinside.com 2019 - 2024. All rights reserved.