Swift 3 Firebase 到 MapKit
Posted
技术标签:
【中文标题】Swift 3 Firebase 到 MapKit【英文标题】:Swift 3 Firebase to MapKit 【发布时间】:2017-03-20 20:30:16 【问题描述】:我希望将数据从 Firebase 数据库获取到地图中。我有很多工作,但被卡住了。这都是 100% 的代码,没有故事板。
我在下面的作品。它会在地图上显示所有图钉,但我被困在了这一点上。我希望能够点击每个引脚并获取该特定引脚的数据。当我这样做时,使用下面的代码我将打印出“tap”和 MTA 的数组。
数据可以显示在引脚注释/信息窗口或视图控制器中地图下方的标签中。我不确定将代码放在哪里/让它工作。我假设不在快照中,但我无法为每个单独的记录/引脚获取数据。
视图已加载以供参考:
override func viewDidLoad()
super.viewDidLoad()
view.backgroundColor = UIColor.white
self.navigationItem.title = stop
mapContainerView.delegate = self
view.addSubview(mapContainerView)
setUpContorller()
fetchTrip()
获取地图坐标的函数:
func fetchTrip()
let ref = FIRDatabase.database().reference()
let tripsRef = ref.child("Trips").child(stop!)
tripsRef.observeSingleEvent(of: .value, with: (snapshot) in
for snap in snapshot.children
let tripSnap = snap as! FIRDataSnapshot
if let dict = tripSnap.value as? [String:AnyObject]
let lat = dict["lat"] as! CLLocationDegrees
let lng = dict["lng"] as! CLLocationDegrees
let MTA = dict["MTAStop"] as! String
let center = CLLocationCoordinate2D(latitude: lat, longitude: lng)
let region = MKCoordinateRegion(center: center, span: MKCoordinateSpan(latitudeDelta: 0.08, longitudeDelta: 0.08))
self.stopMTA.append(MTA)
self.mapContainerView.setRegion(region, animated: true)
let pinCoordinate: CLLocationCoordinate2D = CLLocationCoordinate2DMake(lat, lng)
let annotation = MKPointAnnotation()
annotation.coordinate = pinCoordinate
self.mapContainerView.addAnnotation(annotation)
)
点击 pin 的功能:(我知道我需要更多......不确定是什么,可能是一个保存数据的类。)
func mapView(_ mapView: MKMapView, didSelect view: MKAnnotationView)
// do something
print("tap")
print(stopMTA)
这里是模拟器测试的数据库示例。
提前致谢!
【问题讨论】:
【参考方案1】:使用 MKPointAnnotation() 只会在地图上放置一个图钉。您需要使用自定义类来保存注释信息并使用初始化程序调用它。
原文:
let annotation = MKPointAnnotation()
annotation.coordinate = pinCoordinate
self.mapContainerView.addAnnotation(annotation)
工作版本:
let annotation = PinAnnotation(title: MTA, coordinate: pinCoordinate, info: MTA)
annotation.coordinate = pinCoordinate
self.mapContainerView.addAnnotation(annotation)
还需要:
func mapView(_ mapView: MKMapView, viewFor annotation: MKAnnotation) -> MKAnnotationView?
和
func mapView(_ mapView: MKMapView, annotationView view: MKAnnotationView, calloutAccessoryControlTapped control: UIControl)
【讨论】:
以上是关于Swift 3 Firebase 到 MapKit的主要内容,如果未能解决你的问题,请参考以下文章
使用 Alamofire 和 Mapkit Swift 3 请求