Как установить координатную ось на mapkit в Swift 4.2
Я хочу такое приложение, как Uber. Я могу сохранить координаты пользователя и показать в виде таблицы. Но когда я хочу показать пользовательские координаты на карте, это не работает на стороне водителя. В чем моя ошибка?
Контроллер драйвера:
func tableView(_ tableView: UITableView, didSelectRowAt indexPath: IndexPath) {
let stoaryboard = UIStoryboard(name: "Main", bundle: nil)
let requestVC = stoaryboard.instantiateViewController(withIdentifier: "TaxiRequestVC") as! TaxiRequestAcceptViewController
let snapshot = taksiRequests[indexPath.row]
if let taxiRequestData = snapshot.value as? [String:AnyObject]{
if let email = taxiRequestData["email"] as? String{
if let lat = taxiRequestData["lat"] as? Double{
if let lon = taxiRequestData["lon"] as? Double{
passengerVC.userEmail = email
passengerVC.latitude = lat
passengerVC.longitude = lon
}
}
}
}
self.present(requestVC, animated: true, completion: nil)
}
И RequestVC, как это:
@IBOutlet weak var requestMap: MKMapView!
var userEmail:String?
var latitude:Double?
var longitude:Double?
override func viewDidLoad() {
super.viewDidLoad()
DispatchQueue.main.async {
if let lat = self.latitude{
if let lon = self.longitude{
let center = CLLocationCoordinate2DMake(lat, lon)
let span = MKCoordinateSpanMake(0.01, 0.01)
let region = MKCoordinateRegion(center: center, span: span)
self.requestMap.setRegion(region, animated: true)
let annotation = MKPointAnnotation()
annotation.coordinate = center
if let email = self.userEmail{
annotation.title = email
}
self.requestMap.addAnnotation(annotation)
}
}
}
}
Если я работаю в печатном центре или по электронной почте. Но карта не работает. Есть ли у вас какие-либо идеи?
2 ответа
Похоже, вы делаете что-то не так в раскадровке.
Я скопировал ваш код и использовал его в моей демонстрации.
Пожалуйста, проверь это.
Посмотреть контроллер, откуда я прохожу лат долго
import UIKit
class ViewController: UIViewController {
override func viewDidLoad() {
super.viewDidLoad()
// Do any additional setup after loading the view, typically from a nib.
}
override func didReceiveMemoryWarning() {
super.didReceiveMemoryWarning()
// Dispose of any resources that can be recreated.
}
@IBAction func gotMap(_ sender: Any) {
let map = Map()
map.latitude = 23.0225
map.longitude = 72.5714
self.navigationController?.pushViewController(map, animated: true)
}
}
Посмотреть контроллер, с которого я показываю карту
import UIKit
import MapKit
class Map: UIViewController {
var requestMap = MKMapView()
var userEmail:String?
var latitude:Double?
var longitude:Double?
override func viewDidLoad() {
super.viewDidLoad()
view.addSubview(requestMap)
requestMap.frame = view.frame
DispatchQueue.main.async {
if let lat = self.latitude{
if let lon = self.longitude{
let center = CLLocationCoordinate2DMake(lat, lon)
let span = MKCoordinateSpanMake(0.01, 0.01)
let region = MKCoordinateRegion(center: center, span: span)
self.requestMap.setRegion(region, animated: true)
let annotation = MKPointAnnotation()
annotation.coordinate = center
if let email = self.userEmail{
annotation.title = email
}
self.requestMap.addAnnotation(annotation)
}
}
}
}
}
Я думаю, что вы забыли добавить CLLocationManager
Делегируйте методы, посмотрите этот урок, это поможет вам.
И добавьте ключи доступа в info.plist для доступа к просмотру карты.