按下按钮后获取用户坐标 - Swift/XCode

问题描述 投票:0回答:0

我正在 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]))
//    }
//}

我考虑过在记录开始时获取坐标以及尝试将坐标添加到历史记录中,但在这两种情况下都没有保存或返回任何内容。

ios swift xcode mapkit
© www.soinside.com 2019 - 2024. All rights reserved.