MapViewを使って現在地を表示しよう
マップ機能を取り入れたい時に役立つ知識だと感じたので備忘用に残します。
◉参考記事
それでは実装していきましょう。
1: storyboard上で見た目を作る。上部にボタン、真ん中にMKMapViewを配置
2: Info.plistを選択して、以下の二つを新規追加する(許可表示のための設定らしいです)
Privacy - Location Usage Description
Privacy - Location When In Use Usage Description
3: ボタンとマップをそれぞれプログラムとつなげる
4: 以下コードをコピペ
import UIKit
import MapKit
class ViewController: UIViewController {
@IBOutlet weak var button: UIButton!
@IBOutlet weak var mapView: MKMapView!
let locationManager = CLLocationManager()
override func viewDidLoad() {
super.viewDidLoad()
setupView()
setupMapView()
}
private func setupView() {
button.layer.cornerRadius = 20.0
}
private func setupMapView() {
locationManager.delegate = self
locationManager.desiredAccuracy = kCLLocationAccuracyBest
locationManager.requestWhenInUseAuthorization()
}
@IBAction func getCurrentLocationTapped(_ sender: Any) {
locationManager.requestLocation()
}
}
extension ViewController: CLLocationManagerDelegate {
func locationManager(_ manager: CLLocationManager, didUpdateLocations locations: [CLLocation]) {
guard let loc = locations.last else { return }
CLGeocoder().reverseGeocodeLocation(loc, completionHandler: {(placemarks, error) in
if let error = error {
print("reverseGeocodeLocation Failed: \(error.localizedDescription)")
return
}
if let placemark = placemarks?[0] {
var locInfo = ""
locInfo = locInfo + "Latitude: \(loc.coordinate.latitude)\n"
locInfo = locInfo + "Longitude: \(loc.coordinate.longitude)\n\n"
locInfo = locInfo + "Country: \(placemark.country ?? "")\n"
locInfo = locInfo + "State/Province: \(placemark.administrativeArea ?? "")\n"
locInfo = locInfo + "City: \(placemark.locality ?? "")\n"
locInfo = locInfo + "PostalCode: \(placemark.postalCode ?? "")\n"
locInfo = locInfo + "Name: \(placemark.name ?? "")"
}
})
let cr = MKCoordinateRegion(center: loc.coordinate, latitudinalMeters: 500, longitudinalMeters: 500)
mapView.setRegion(cr, animated: true)
let pa = MKPointAnnotation()
pa.title = "ここにいるよ!"
pa.coordinate = loc.coordinate
mapView.removeAnnotations(mapView.annotations)
mapView.addAnnotation(pa)
}
func locationManager(_ manager: CLLocationManager, didFailWithError error: Error) {
print("error: \(error.localizedDescription)")
}
}
ここまでできたらビルドをしましょう
今回は以上です。
この記事が気に入ったらサポートをしてみませんか?