😪
SwiftUI向けのMapKitの使い方
マップの追加方法
import Swift
import MapKit
struct ContentView: View {
var body: some View {
Map()
}
}
こんな感じでマップを追加することができます!
コンテンツの表示
MapContentBuilderクロージャを使ってマップにマーカーを追加します。
import Swift
import MapKit
struct ContentView: View {
var body: some View {
Map() {
Marker("Parking", coordinate: .parking)
}
}
}
Marker("(名前)", coordinate: "(座標)"), という風に追加することができます。
マップ上で場所の雰囲気を伝える
マップ上で場所の雰囲気を伝えるようにする為、mapStyleを使って:
- 現実的な地形標高を表示させる
- 上空からの画像を表示させる
import Swift
import MapKit
struct ContentView: View {
var body: some View {
Map() {
Marker("Parking", coordinate: .parking)
}
.mapStyle(.standard(elevation: .realistic))
}
}
mapStyleを駆使することで、よりアプリに現実味を出すことができます。
こんな感じです!
逆にmapStyleをstandardからimageryに変えると...
こんな風にすることもできます。
カメラのポジションを設定する
ユーザーの位置を追うカメラポジション
position = .userlocation(fallback: .automatic)
ポジションの指定
@State var position: MapCameraPosition
var body: some View {
Map(position: $position)
}
カメラをポジションさせる
表示させる場所やリージョンを指定する
- automatic
- region(MKCoordinateRegion)
- rect(MKMapRect)
- item(MKMapItem)
- camera(MapCamera)
- userLocation()
ユーザーのアクションに伴わせる
- positionedByUser
現在地の取得
LocationManagerを使ってユーザーの現在地を取得します
public class LocationManager: NSObject, ObservableObject {
private let backgroundSession = CLBackgroundActivitySession()
private let updates = CLLocationUpdate.liveUpdates()
@Published var lat: Double = 0
@Published var lon: Double = 0
@ObservedObject public static var shared = LocationManager()
public let manager = CLLocationManager()
public override init() {
super.init()
}
public func requestAuthorization() {
manager.requestWhenInUseAuthorization()
manager.requestAlwaysAuthorization()
}
Map Controls
Map()
.mapControls {
MapScaleView()
MapUserLocationButton()
}
Map()
.mapControls {
MapCompass()
.mapControlVisibility(.visible)
MapPitchButton()
.buttonBorderShape(.circular)
.tint(.purple)
}
.controlSize(.large)
参照
Discussion