Q&A
CLLocationManager()を使って位置情報を取得しています。ボタンでスタート、ストップをさせたく以下のようなコードを書いてみたのですが、map_startがfalseの時は確かに位置情報の取得(更新)は止まるのですが、iPhone上では画面左上の青い表示(下記画像参照ください)のGPSがオンになったままです。アプリを強制的に終了(画面下から上にワイプ)すればGPSもオフになるのですが、アプリ上でオフにするにはどうしたらいいでしょうか。
(そもそも位置情報更新のオンオフの度に LocationManagerクラスのインスタンスを行うこと*1自体問題はないのかという疑問は持っているのですが、それ以外の方法が思いつきません)
すいません。お知恵を拝借したく、よろしくお願いいたします。
swift
1// ContentView.swift 2import SwiftUI 3import MapKit 4var latetude : Double = 0.0 5var longitude : Double = 0.0 6var map_start = true 7 8struct ContentView: View { 9 10 var body: some View { 11 12 let latetude = $manager.location.wrappedValue.coordinate.latitude 13 let longitude = $manager.location.wrappedValue.coordinate.longitude 14 15 HStack{ 16 Button(action: { //startボタン 17 map_start = true 18 var _manager = LocationManager() // <----*1 19 }) 20 { 21 Image(systemName: "play") 22 } 23 Button(action: { // stopボタン 24 map_start = true 25 var _manager = LocationManager() // <----*1 26 }) 27 { 28 Image(systemName: "stop.circle") 29 } 30 } 31 ZStack(alignment: .bottomTrailing){ 32 MapView(mapType: .standard,latetude: latetude,longitude: longitude) 33 { 34 Image(systemName: "map") 35 .resizable() 36 .frame(width: 35.0,height: 35.0, alignment: .leading) 37 } 38 } 39 } 40 41}
swift
1// LocationManager.swift 2 3import SwiftUI 4import MapKit 5 6class LocationManager: NSObject, ObservableObject, CLLocationManagerDelegate { 7 let manager = CLLocationManager() 8 @Published var location = CLLocation() 9 10 override init() { 11 super.init() 12 self.manager.delegate = self 13 self.manager.requestWhenInUseAuthorization() 14 self.manager.desiredAccuracy = kCLLocationAccuracyBest 15 self.manager.distanceFilter = 10 16 if map_start == true{ 17 self.manager.allowsBackgroundLocationUpdates = true 18 self.manager.startUpdatingLocation() 19 }else{ 20 self.manager.allowsBackgroundLocationUpdates = false 21 self.manager.stopUpdatingLocation() 22 } 23 } 24
回答1件
あなたの回答
tips
プレビュー
下記のような回答は推奨されていません。
このような回答には修正を依頼しましょう。