如何在mapVIew中添加多重标注
How to add multiply annotation in mapVIew
我有 mapView 和来自 firebase 的地址。现在我只能在 mapView 中添加一个注释,但是在 print("Address (self.allAddresses)") 中我得到了三个地址:
地址莫斯科,Presnenskaya 路堤 8,公寓 195,入口 94
地址 Moscow, st. Pravdy d.24 楼 3
地址 Moscow, Elektrozavodskaya st., 21
如何添加三个或更多注释?
我的火力基地:
{
«Address» : {
«AddressOne» : {
"address" : "Москва, Пресненская набережная д.8, квартира 195, подъезд 94",
},
"AddressTwo» : {
"address" : "Москва, ул. Правды д.24 строение 3",
},
"AddressThree» : {
"address" : "Москва,ул.Электрозаводская д.21",
}
}
}
还有我的代码:
class AddressesMapViewController: UIViewController, MKMapViewDelegate, CLLocationManagerDelegate {
@IBOutlet weak var mapView: MKMapView!
var allAddresses: String = ""
var count = 0
let geocoder = CLGeocoder()
var addressRef: DatabaseReference!
override func viewDidLoad() {
super.viewDidLoad()
addressRef = Database.database().reference(withPath: "Address")
loadAddressFromFirebase()
}
func loadAddressFromFirebase() {
addressRef.observe(.value, with: { (snapshot) in
for address in snapshot.children.allObjects as! [DataSnapshot] {
let value = address.value as! NSDictionary
self.allAddresses = value["address"] as? String ?? ""
print("Address \(self.allAddresses)")
if self.count < self.allAddresses.count {
let addresses = self.allAddresses
self.geocoder.geocodeAddressString(addresses, completionHandler: { (placemarks, error) in
print("Address - \(addresses)")
guard error == nil else { return }
guard let placemarks = placemarks else { return }
if let placemark = placemarks.first {
self.mapView.addAnnotation(MKPlacemark(placemark: placemark))
}
self.count += 1
print("Count - \(self.count)")
})
}
}
})
}
}
- 尝试在 'for' 循环中分配地理编码器。
调用geocoder.cancelGeocode()
方法。
let geocoder = CLGeocoder()
geocoder.geocodeAddressString(addresses, completionHandler: { (placemarks, error) in
print("Address - \(addresses)")
guard error == nil else { return }
guard let placemarks = placemarks else { return }
if let placemark = placemarks.first {
self.mapView.addAnnotation(MKPlacemark(placemark: placemark))
}
self.count += 1
print("Count - \(self.count)")
geocoder.cancelGeocode()
})
我有 mapView 和来自 firebase 的地址。现在我只能在 mapView 中添加一个注释,但是在 print("Address (self.allAddresses)") 中我得到了三个地址:
地址莫斯科,Presnenskaya 路堤 8,公寓 195,入口 94
地址 Moscow, st. Pravdy d.24 楼 3
地址 Moscow, Elektrozavodskaya st., 21
如何添加三个或更多注释?
我的火力基地:
{
«Address» : {
«AddressOne» : {
"address" : "Москва, Пресненская набережная д.8, квартира 195, подъезд 94",
},
"AddressTwo» : {
"address" : "Москва, ул. Правды д.24 строение 3",
},
"AddressThree» : {
"address" : "Москва,ул.Электрозаводская д.21",
}
}
}
还有我的代码:
class AddressesMapViewController: UIViewController, MKMapViewDelegate, CLLocationManagerDelegate {
@IBOutlet weak var mapView: MKMapView!
var allAddresses: String = ""
var count = 0
let geocoder = CLGeocoder()
var addressRef: DatabaseReference!
override func viewDidLoad() {
super.viewDidLoad()
addressRef = Database.database().reference(withPath: "Address")
loadAddressFromFirebase()
}
func loadAddressFromFirebase() {
addressRef.observe(.value, with: { (snapshot) in
for address in snapshot.children.allObjects as! [DataSnapshot] {
let value = address.value as! NSDictionary
self.allAddresses = value["address"] as? String ?? ""
print("Address \(self.allAddresses)")
if self.count < self.allAddresses.count {
let addresses = self.allAddresses
self.geocoder.geocodeAddressString(addresses, completionHandler: { (placemarks, error) in
print("Address - \(addresses)")
guard error == nil else { return }
guard let placemarks = placemarks else { return }
if let placemark = placemarks.first {
self.mapView.addAnnotation(MKPlacemark(placemark: placemark))
}
self.count += 1
print("Count - \(self.count)")
})
}
}
})
}
}
- 尝试在 'for' 循环中分配地理编码器。
调用
geocoder.cancelGeocode()
方法。let geocoder = CLGeocoder() geocoder.geocodeAddressString(addresses, completionHandler: { (placemarks, error) in print("Address - \(addresses)") guard error == nil else { return } guard let placemarks = placemarks else { return } if let placemark = placemarks.first { self.mapView.addAnnotation(MKPlacemark(placemark: placemark)) } self.count += 1 print("Count - \(self.count)") geocoder.cancelGeocode() })