У меня есть два ViewController: MapVC и SliderVC. На MapVC у меня есть 3D сенсорная кнопка, и при нажатии на нее, SliderVC представляет модально. Я хочу добавить аннотации в MapVC при прокрутке UISLider.
Я пытался добиться этого по протоколу. Я создал функцию протокола SliderVCDelegate и слабый делегат var моему SLiderVC. Когда я назначаю addTarget для UISLider, он ловит функцию и правильно печатает значение в моей целевой функции. Но проблема в том, что в моем MapVC я добавил заглушки протокола, но он не работает и может даже поймать мою печать.
Это мои SLiderVC и SliderVCDelegate.
import UIKit
import Panels
import TGPControls
import MapKit
import CoreLocation
protocol SliderVCDelegate: class {
func addAnnotationsToMap(annotation: MKPointAnnotation?)
}
class SliderVC: UIViewController, CLLocationManagerDelegate {
// MARK: Slider properties
weak var delegate: SliderVCDelegate?
var mapView: MapVC?
@IBOutlet weak var camelLabel: TGPCamelLabels!
@IBOutlet weak var discreteSlider: TGPDiscreteSlider!
let locationManager = LocationManager()
override func viewDidLoad() {
super.viewDidLoad()
//...
discreteSlider.addTarget(self, action: #selector(valueChanged(_:event:)), for: .valueChanged)
// ...
}
func generateRandomCoordinates(min: UInt32, max: UInt32)-> CLLocationCoordinate2D {
// ...
}
@objc func valueChanged(_ sender: TGPDiscreteSlider, event: UIEvent) {
var num = 0
let annotation = MKPointAnnotation()
//First we declare While to repeat adding Annotation
while num != 15 {
num += 1
//Add Annotation
annotation.coordinate = generateRandomCoordinates(min: 70, max: 150) //this will be the maximum and minimum distance of the annotation from the current Location (Meters)
annotation.title = "Title"
annotation.subtitle = "SubTitle"
}
delegate?.addAnnotationsToMap(annotation: annotation)
print(event) // prints correctly
print(sender.value)
}
}
И этомой MapVC, где я назначаю заглушки протокола, и он ничего не печатает.
@objc class MapVC: UIViewController, MapVCDelegate , UIGestureRecognizerDelegate, CLLocationManagerDelegate {
// ...
override func prepare(for segue: UIStoryboardSegue, sender: Any?) {
if segue.identifier == "segue" {
guard let sliderVC = storyboard?.instantiateViewController(withIdentifier: "SliderVC") as? SliderVC else { return
}
sliderVC.delegate = self
}
}
}
extension MapVC: SliderVCDelegate {
func addAnnotationsToMap(annotation: MKPointAnnotation?) {
// mapView.addAnnotation(annotation!)
print("Anything") // Doesn't print, not reaches here.
}
}