I have multiple place marks on map. Have added tap gestures on them. Adding listener in for loop replacing tap one by one and only last marker is having a gesture. Local reference doesn't work at all it doesn't provide a tap. with strong reference only it works. not able to get an idea how can i have tap on all of them.
func showMarkers() {
let mapObjects = yandexMapView.mapWindow.map.mapObjects
mapObjects.clear()
for pickupPoint in masterVC?.aryPickupPoints ?? [] {
if pickupPoint.latitude != 0 && pickupPoint.longitude != 0 {
let point = YMKPoint(latitude: pickupPoint.latitude!, longitude: pickupPoint.longitude!)
let placemark = mapObjects.addPlacemark(with: point)
placemark.userData = pickupPoint
switch pickupPoint.pickupType {
case 3:
if let image = UIImage(named: "lockerPin") {
placemark.setIconWith(self.imageWithImage(image: image, scaledToSize: CGSize(width: 30, height: 40)))
}
default:
if let image = UIImage(named: "otherPin") {
placemark.setIconWith(self.imageWithImage(image: image, scaledToSize: CGSize(width: 30, height: 40)))
}
}
dLog("------------- \(point)----------------")
// Client code must retain strong reference to the listener.
yandexMapObjectTapListener = YandexMapObjectTapListener(controller: self)
placemark.addTapListener(with: yandexMapObjectTapListener)
}
}
//MARK: - YandexMapObjectTapListener
private class YandexMapObjectTapListener: NSObject, YMKMapObjectTapListener {
private weak var controller: UIViewController?
var selectedPickupPoint: PickupPoint?
init(controller: UIViewController) {
self.controller = controller
}
func onMapObjectTap(with mapObject: YMKMapObject, point: YMKPoint) -> Bool {
guard let marker = mapObject as? YMKPlacemarkMapObject else { return false }
let pickupPoint = marker.userData as? PickupPoint
let data = ["pickupPoint": pickupPoint as Any,
"marker": marker] as [String : Any]
NotificationCenter.default.post(name: NSNotification.Name(rawValue: NotificationObserver.ShowBottomSheet), object: nil, userInfo: data)
return true
}
}