実現したいこと
UIViewRepresentableを用いて、現在地を取得して現在地周辺を拡大して表示したいです。
お力をお借りできると大変助かります。
よろしくお願いします!
前提
下記のコードで、span
で指定したように拡大表示がされない状態です。
日本列島が丸ごと引いた状態で表示されてしまいます。
現在位置は正しく表示されています。(zoomして確認できます。)
swift
1func updateUIView(_ view: MKMapView, context: Context) { 2 // ユーザーの現在位置を取得 3 if let userLocation = view.userLocation.location { 4 // 地図の表示領域を設定 5 let coordinate = userLocation.coordinate 6 let span = MKCoordinateSpan(latitudeDelta: 0.01, longitudeDelta: 0.01) 7 let region = MKCoordinateRegion(center: coordinate, span: span) 8 view.setRegion(region, animated: true) 9 } 10 }
全体のソースコード
swift
1import SwiftUI 2import MapKit 3 4struct MapView: UIViewRepresentable { 5 func makeUIView(context: Context) -> MKMapView { 6 let mapView = MKMapView() 7 mapView.showsUserLocation = true 8 mapView.userTrackingMode = .follow 9 return mapView 10 } 11 12 func updateUIView(_ view: MKMapView, context: Context) { 13 // ユーザーの現在位置を取得 14 if let userLocation = view.userLocation.location { 15 // 地図の表示領域を設定 16 let coordinate = userLocation.coordinate 17 let span = MKCoordinateSpan(latitudeDelta: 0.01, longitudeDelta: 0.01) 18 let region = MKCoordinateRegion(center: coordinate, span: span) 19 view.setRegion(region, animated: true) 20 } 21 } 22} 23 24struct ContentView: View { 25 var body: some View { 26 MapView() 27 .ignoresSafeArea(edges: .all) 28 .task() { 29 //位置情報へのアクセスを要求 30 let manager = CLLocationManager() 31 manager.requestWhenInUseAuthorization() 32 } 33 } 34}
試したこと
こちらのコードだと拡大表示されます。
swift
1func updateUIView(_ uiView: MKMapView, context: Context) { 2 let coordinate = CLLocationCoordinate2D(latitude: 35.681236, longitude: 139.767125) // 東京駅の座標 3 let span = MKCoordinateSpan(latitudeDelta: 0.1, longitudeDelta: 0.1) // 表示範囲 4 let region = MKCoordinateRegion(center: coordinate, span: span) // 表示領域 5 6 uiView.setRegion(region, animated: true) // 地図を表示 7 }
補足情報(FW/ツールのバージョンなど)
xcode14.3
iOS16.4
回答1件
あなたの回答
tips
プレビュー