Begrüßungsprofis,
Wie ich weiß, können wir eine Karte erstellen, indem wir Google Map API für IOS wie den folgenden Code verwenden.
import UIKit
import GoogleMaps
/* For cocoa:
Import Cocoa
Import MapKit
*/
class ViewController: NSViewController, CLLocationManagerDelegate {
@IBOutlet var mapView: MKMapView!
var locationManager = CLLocationManager()
var didFindMyLocation = false
var strForCurLatitude = "";
var strForCurLongitude = "";
var currentLocation = locManager.location!
override func viewDidLoad() {
super.viewDidLoad()
locationManager.delegate = self
locationManager.requestWhenInUseAuthorization()
locationManager.desiredAccuracy = kCLLocationAccuracyBest
locationManager.distanceFilter = kCLDistanceFilterNone
locationManager.startUpdatingLocation()
}
func locationManager(_ manager: CLLocationManager, didChangeAuthorization status: CLAuthorizationStatus) {
if status == .authorizedWhenInUse {
print("User allowed us to access location")
}
}
func locationManager(_ manager: CLLocationManager, didFailWithError error: Error) {
print("Error while get location \(error)")
}
func locationManager(_ manager: CLLocationManager, didUpdateLocations locations: [CLLocation]) {
let location: CLLocation? = locationManager.location
let coordinate: CLLocationCoordinate2D? = location?.coordinate
print(coordinate!)
print(coordinate!.latitude)
print(coordinate!.longitude)
strForCurLatitude = "\(coordinate!.latitude)"
strForCurLongitude = "\(coordinate!.longitude)"
let camera = GMSCameraPosition.camera(withLatitude: coordinate!.latitude, longitude: coordinate!.longitude, zoom: 15)
let mapView = GMSMapView.map(withFrame: .zero, camera: camera)
mapView.isMyLocationEnabled = true
self.view = mapView
let marker = GMSMarker()
marker.position = CLLocationCoordinate2DMake(coordinate!.latitude, coordinate!.longitude)
marker.map = mapView
}
override var representedObject: Any? {
didSet {
// Update the view, if already loaded.
}
}
}
Aber als ich die ähnliche Methode für osx ausprobiert habe ( der Unterschied besteht darin, dass ich Mapkit anstelle von Google Map verwende ), heißt es, dass requestWhenInUseAuthorization () 'nicht verfügbar ist . Ich red diesen Thread Wie erhalte ich den Standort des Benutzers? [macOS] aber es scheint ohne klare Lösung zu sein, ob es verfügbar ist, um den aktuellen Standort für osx abzurufen oder nicht. Ist es also nicht möglich, den aktuellen Standort für die macOS / cocoa-App abzurufen? Wenn nicht, wie kann man dann den aktuellen Standort in der Kakao-App ermitteln?
Ich bin mir ziemlich sicher, dass viele Xcode-Programmierer wie ich versucht haben, dieses Problem zu lösen. Jede Antwort, die Sie bekommen, wird eine große Anerkennung bekommen. :) :)
requestWhenInUseAuthorization
ist unter macOS nicht verfügbar.
Hier ist die Quelle für eine NSViewController-Unterklasse, die unter macOS 10.13.6 erfolgreich nach dem Standortmanager und dem aktuellen Standort in Xcode 10.1 sucht:
import Cocoa
import MapKit
import CoreLocation
class MapViewController: NSViewController, CLLocationManagerDelegate {
@IBOutlet weak var mapView: MKMapView!
let locationManager = CLLocationManager()
override func viewDidLoad() {
super.viewDidLoad()
locationManager.delegate = self
locationManager.startUpdatingLocation()
}
func locationManager(_ manager: CLLocationManager,
didChangeAuthorization status: CLAuthorizationStatus) {
print("location manager auth status changed to:" )
switch status {
case .restricted:
print("status restricted")
case .denied:
print("status denied")
case .authorized:
print("status authorized")
let location = locationManager.location
print("location: \(String(describing: location))")
case .authorizedAlways:
print("status authorized always")
case .notDetermined:
print("status not yet determined")
}
}
func locationManager(_ manager: CLLocationManager,
didFailWithError error: Error) {
print( "location manager failed with error \(error)" )
}
}
funktioniert für mich unter macOS, wenn Sie beim ersten Start der App Ja zur Eingabeaufforderung "Standortdienste aktivieren" sagen.
Beachten Sie, dass Sie auch den NSLocationWhenInUseUsageDescription
Eintrag in der Eigenschaftsliste benötigen, wie in der Dokumentation angegeben.
Konsolenausgabe ist (leicht verschleiert):
Der Authentifizierungsstatus des Standortmanagers wurde geändert in: Status noch nicht festgelegt Der Authentifizierungsstatus des Standortmanagers wurde geändert in: Status Autorisierter Standort: Optional (<+ 4X.48, -12X.62632228> +/- 65,00 m (Geschwindigkeit -1,00 mps / Kurs -1,00) @ 03.11.18, 11:42:48 Uhr pazifische Sommerzeit)
Dieser Artikel stammt aus dem Internet. Bitte geben Sie beim Nachdruck die Quelle an.
Bei Verstößen wenden Sie sich bitte [email protected] Löschen.
Lass mich ein paar Worte sagen