私は取得する方法のためにウェブをサーフィンしてきましたSwift 2.0でのユーザーの現在の場所、残念ながら何も機能していません。これが私が取り組んでいるコードですが、機能しません。info.plistファイルで遊んでいますが、何を追加すればよいかわかりません。誰かが私が間違っていることを教えてもらえますか?
import CoreLocation
class ViewController: UIViewController {
let locationManager = CLLocationManager()
override func viewDidLoad(){
super.viewDidLoad()
findMyLocation()
}
func findMyLocation() {
locationManager.delegate = self
locationManager.desiredAccuracy = kCLLocationAccuracyNearestTenMeters
locationManager.requestWhenInUseAuthorization()
locationManager.startUpdatingLocation()
}
}
extension ViewController: CLLocationManagerDelegate {
func locationManager(manager: CLLocationManager, didUpdateLocations locations: [CLLocation]) {
for location in locations {
print("THIS IS THE LATTITUDE (location.coordinate.latitude)")
}
locationManager.stopUpdatingLocation()
}
}
回答:
回答№1は0編集:あなたの中で didUpdateLocations
機能は強制しない stopUpdatingLocation
。この関数は、現在地が確定して地図に表示される前に、複数回呼び出されます。その行を削除すると、コンソールが緯度と経度で3〜5回印刷されることがわかります。
ユーザーの場所を取得するための推奨される方法は、アクセス許可があることを常に確認することです。そうしない場合は、ユーザーに警告して、そのアクセス許可を求めることができます。
あなたのviewDidLoad()で
locationManager?.requestAlwaysAuthorization()
// .AuthorizedInUse or .AuthorizedAlways depending on your app
if CLLocationManager.authorizationStatus() == .AuthorizedInUse {
locationManager?.distanceFilter = 5.0
locationManager?.requestLocation()
}
これにより、承認がない場合は承認を要求し、承認が拒否されたかどうかを確認できます。さらに、この機能を CLLocationManagerDelegate
func locationManager(manager: CLLocationManager, didChangeAuthorizationStatus status: CLAuthorizationStatus)
{
//Again this can be .AuthorizedAlways or .AuthorizedInUse depending
if status == .AuthorizedAlways {
locationManager?.startUpdatingLocation()
// ...
}
}
これにより、位置情報サービスの使用後に位置情報のアクセス許可が変更された場合でも、アプリは適切に応答できます。 viewDidLoad()
.
func locationManager(manager: CLLocationManager, didUpdateLocations locations: [CLLocation]) {
let location = locations.last
centerLocation = location
let center = CLLocationCoordinate2D(latitude: location!.coordinate.latitude, longitude: location!.coordinate.longitude)
let region = MKCoordinateRegion(center: center, span: MKCoordinateSpan(latitudeDelta: 0.02, longitudeDelta: 0.02))
userLocationRegion = region
mainMapView.showAnnotations(mainMapView.annotations, animated: true)
self.mainMapView.setRegion(region, animated: true)
}
回答№2の場合は0
NSLocationWhenInUseUsageDescriptionを追加する必要があります。または、NSLocationAlwaysUsageDescriptionはユースケースによって異なります。