我正在 XCode 中制作一个应用程序,让用户点击一个按钮来记录他们的演讲并将其保存到带有日期和时间的历史选项卡中。我还试图在用户点击按钮时保存用户的位置(纬度,经度),但到目前为止我运气不好。
下载完整的项目
这是我的地图:
import MapKit
enum MapDetails{
static let startingLocation = CLLocationCoordinate2D(latitude: 41.8067, longitude: -72.2522) // UConn Storrs campus
static let defaultSpan = MKCoordinateSpan(latitudeDelta: 0.01, longitudeDelta: 0.01) // how much screen is covered
}
final class MapViewModel: NSObject, ObservableObject, CLLocationManagerDelegate {
@Published var region = MKCoordinateRegion(center: MapDetails.startingLocation,
span: MapDetails.defaultSpan) //how zoomed in
var locationManager: CLLocationManager? //optional; users have location services turned off
func checkIfLocationServicesIsEnabled() {
if CLLocationManager.locationServicesEnabled() {
locationManager = CLLocationManager()
locationManager!.delegate = self
//locationManager?.desiredAccuracy = kCLLocationAccuracyBest
//locationManager?.activityType = CLActivityType.automotiveNavigation
} else {
print("Location services are turned of. Please turn on in phone settings.")
}
}
func checkLocationAuthorization() {
guard let locationManager = locationManager else { return } //unwrap optional
switch locationManager.authorizationStatus {
case .notDetermined:
locationManager.requestWhenInUseAuthorization()
case .restricted:
print("Your location is restricted. Check phone settings or parental controls.")
case .denied:
print("You have denied location permissions. Please fix in phone settings.")
case .authorizedAlways, .authorizedWhenInUse:
region = MKCoordinateRegion(center: locationManager.location!.coordinate,
span: MapDetails.defaultSpan)
@unknown default:
break
}
}
func locationManagerDidChangeAuthorization(_ manager: CLLocationManager) {
checkLocationAuthorization()
}
}
这是我的麦克风按钮:
import SwiftUI
import AVFoundation
import CoreLocation
struct MicView: View {
@StateObject private var viewModel = MapViewModel()
@Binding var history: History
@StateObject var speechRecognizer = SpeechRecognizer()
@State private var isRecording = false
// @State private var newRecording: Recording
private var player: AVPlayer { AVPlayer.sharedDingPlayer }
var body: some View {
ZStack {
RoundedRectangle(cornerRadius: 16)
.fill(.mint)
VStack {
MicHeaderView()
MicCircleView(isRecording: isRecording)
// MeetingFooterView()
}
}
.padding()
.foregroundColor(.white)
.onAppear {
speechRecognizer.reset()
speechRecognizer.transcribe()
isRecording = true
viewModel.checkIfLocationServicesIsEnabled()
}
.onDisappear {
speechRecognizer.stopTranscribing()
isRecording = false
// newRecording.transcript = speechRecognizer.transcript
let newRecording = Recording(transcript: speechRecognizer.transcript)
history.history.insert(newRecording, at: 0)
}
.navigationBarTitleDisplayMode(.inline)
}
}
//struct MeetingView_Previews: PreviewProvider {
// static var previews: some View {
// MeetingView(scrum: .constant(DailyScrum.sampleData[0]))
// }
//}
我考虑过在记录开始时获取坐标以及尝试将坐标添加到历史记录中,但在这两种情况下都没有保存或返回任何内容。