完整项目
我正在制作一个应用程序,让用户按下按钮开始自己录制。录音的抄本随即保存在“历史记录”选项卡中,其中包含录音的日期和时间。现在我有一个跟踪用户位置的地图视图以及一个显示不断更新的当前坐标的栏。我正在尝试将这些坐标(纬度、经度)保存到成绩单中:
import SwiftUI
import CoreLocation
struct TranscriptView: View {
@Binding var recording: Recording
// let recording: Recording
@State private var isEditing = false
@ObservedObject private var locationManager = LoocationManager()
let locationnManager = CLLocationManager()
var body: some View {
**let coordinate = self.locationManager.location != nil ? self.locationManager.location!.coordinate : CLLocationCoordinate2D()**
ScrollView {
VStack(alignment: .leading) {
Divider()
.padding(.bottom)
if let transcript = recording.transcript {
Text("Transcript")
.font(.headline)
.padding(.top)
Text(transcript)
**Text("\(coordinate.latitude), \(coordinate.longitude)")**
}
}
// TextEditor(text: recording.transcript)
// TextField(
// "Edit Transcript",
// text: $recording.transcript
// )
}
.navigationTitle(Text(recording.date, style: .date) + Text(" ") + Text(recording.date, style: .time))
.toolbar {
NavigationLink(destination: TranscriptEditView(recording: $recording)) {
Text("Edit")
}
}
.padding()
}
}
但是由于我的位置总是在更新,所以成绩单中的坐标也在不断更新:
class LoocationManager: NSObject, ObservableObject {
@Published var locationManager = CLLocationManager()
@Published var location: CLLocation? = nil
override init() {
super.init()
self.locationManager.delegate = self
self.locationManager.desiredAccuracy = kCLLocationAccuracyBest
self.locationManager.distanceFilter = kCLDistanceFilterNone
self.locationManager.requestWhenInUseAuthorization()
**self.locationManager.startUpdatingLocation()**
}
}
extension LoocationManager: CLLocationManagerDelegate {
func locationManager(_ manager: CLLocationManager, didUpdateLocations locations: [CLLocation]) {
guard let location = locations.last else {
return
}
self.location = location
}
我试过像这样打电话给
self.locationManager.stopUpdatingLocation()
:
extension LoocationManager: CLLocationManagerDelegate {
func locationManager(_ manager: CLLocationManager, didUpdateLocations locations: [CLLocation]) {
guard let location = locations.last else {
return
}
**self.locationManager.stopUpdatingLocation()**
self.location = location
}
}
但坐标保持不变。当用户开始录制时,我应该如何保存他们的坐标,同时仍然能够跟踪他们的位置?