#swift #xcode #annotations #mkmapview #mkannotation
#swift #xcode #аннотации #mkmapview #mkannotation
Вопрос:
После перехода к контроллеру представления карты UITabBarItem должен выполнить действие, после чего аннотация должна быть добавлена на карту
класс MapViewController: UIViewController, UITabBarDelegate {
@IBOutlet weak var middleMapButton: UITabBarItem!
@IBOutlet weak var mapView: MKMapView!
let locationManager = CLLocationManager()
let regionInMeters: Double = 10000
override func viewWillAppear(_ animated: Bool) {
super.viewWillAppear(animated)
navigationController?.isNavigationBarHidden = true
ecoMapButton.image = UIImage(systemName: "plus.circle")
}
override func viewWillDisappear(_ animated: Bool) {
super.viewWillDisappear(animated)
navigationController?.isNavigationBarHidden = false
middleMapButton.image = UIImage(systemName: "mappin.circle")
}
override func viewDidLoad() {
super.viewDidLoad()
// Do any additional setup after loading the view.
checkLocationServices()
}
Вот действие для этого элемента панели вкладок
func tabBar(_ tabBar: UITabBar, didSelect item: UITabBarItem) {
let annotation = MKPointAnnotation()
annotation.coordinate = CLLocationCoordinate2D(latitude: 41.881832, longitude: -87.623177)
mapView.addAnnotation(annotation)
}
Вот некоторые действия по обеспечению конфиденциальности местоположения
func setupLocationManager() {
locationManager.delegate = self
locationManager.desiredAccuracy = kCLLocationAccuracyBest
}
func centerViewOnUserLocation() {
if let location = locationManager.location?.coordinate {
let region = MKCoordinateRegion.init(center: location, latitudinalMeters: regionInMeters, longitudinalMeters: regionInMeters)
mapView.setRegion(region, animated: true)
}
}
func checkLocationServices() {
if CLLocationManager.locationServicesEnabled() {
setupLocationManager()
checkLocationAuthorization()
} else {
}
}
}
Комментарии:
1. Вы уверены, что аннотация находится в вашем
setRegion
? Также не похоже, что вы устанавливаете делегат для TabBarController, поэтому ваш метод не вызывается2. Существует UITabBarDelegate, но он не работает даже с этим классом MapViewController: UIViewController, UITabBarDelegate
3. Вы должны назначить это
delegate
, чтобы UITabViewController проверил шаблон делегирования. Это очень распространено в iOS4. Я должен назначить его в viewDidLoad?
5. Мне понравилась эта middleMapButton. делегировать = self