我已经看到了这些问题的变体,但是没有适用于我如何设置代码的答案。我对解决方案感到困惑,并且我已经立即完成了这个项目。所以,我正在寻求帮助。
我想做的是:
从我的Firebase阵列中拉出坐标,设置如下:FireBase Setup
我的主要Feed是这样的:
//
// FeedVC.swift
// GotToGo
//
// Created by HSI on 9/3/17.
// Copyright © 2017 HSI. All rights reserved.
//
import UIKit
import MapKit
import Firebase
import CoreLocation
class FeedVC: UIViewController, UITableViewDelegate, UITableViewDataSource, MKMapViewDelegate, CLLocationManagerDelegate {
@IBOutlet weak var tableView: UITableView!
@IBOutlet weak var mapView: MKMapView!
let locationManager = CLLocationManager()
var centerMapped = false
var geoFire: GeoFire!
var posts = [Post]()
override func viewDidLoad() {
super.viewDidLoad()
mapView.delegate = self
mapView.userTrackingMode = MKUserTrackingMode.follow
tableView.delegate = self
tableView.dataSource = self
DataService.ds.REF_VENUE.observe(.value, with: { (snapshot) in
self.posts = [] // THIS IS THE NEW LINE
if let snapshot = snapshot.children.allObjects as? [DataSnapshot] {
for snap in snapshot {
if let postDict = snap.value as? Dictionary<String, AnyObject> {
let key = snap.key
let post = Post(postKey: key, postData: postDict)
self.posts.append(post)
}
if let locationDict = snap.value as? Dictionary<String, AnyObject> {
let lat = locationDict["LATITUDE"] as! CLLocationDegrees
let long = locationDict["LONGITUDE"] as! CLLocationDegrees
let center = CLLocationCoordinate2D(latitude: lat, longitude: long)
_ = MKCoordinateRegion(center: center, span: MKCoordinateSpan(latitudeDelta: 0.10, longitudeDelta: 0.10))
print(lat,long)
}
}
}
self.tableView.reloadData()
})
}
//Brings up the user on the map after authorization
override func viewDidAppear(_ animated: Bool) {
super.viewDidAppear(animated)
locationAuthStatus()
}
//Checks if app is authorized to get user's location data.
func locationAuthStatus () {
if CLLocationManager.authorizationStatus() == .authorizedWhenInUse {
mapView.showsUserLocation = true
} else {
locationManager.requestWhenInUseAuthorization()
}
}
func locationManager(_ manager: CLLocationManager, didChangeAuthorization status: CLAuthorizationStatus) {
if status == .authorizedWhenInUse {
mapView.showsUserLocation = true
}
}
func centerMapOnLocation(location: CLLocation) {
let coordinateRegion = MKCoordinateRegionMakeWithDistance(location.coordinate, 1000, 1000)
mapView.setRegion(coordinateRegion, animated: true)
}
func mapView(_ mapView: MKMapView, didUpdate userLocation: MKUserLocation) {
if let loc = userLocation.location {
if !centerMapped {
centerMapOnLocation(location: loc)
centerMapped = true
}
}
}
func mapView(_ mapView: MKMapView, viewFor annotation: MKAnnotation) -> MKAnnotationView? {
var annotationView: MKAnnotationView?
if annotation.isKind(of: MKUserLocation.self) {
annotationView = MKAnnotationView(annotation: annotation, reuseIdentifier: "User")
annotationView?.image = UIImage(named: "icon")
}
return annotationView
}
func tableView(_ tableView: UITableView, numberOfRowsInSection section: Int) -> Int {
return posts.count
}
func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell {
if let cell = tableView.dequeueReusableCell(withIdentifier: "detailCell", for: indexPath) as? PostCell {
let cellData = posts[indexPath.row]
cell.configureCell(post: cellData)
return cell
} else {
return PostCell()
}
}
func tableView(_ tableView: UITableView, didSelectRowAt indexPath: IndexPath) {
let post = posts[indexPath.row]
performSegue(withIdentifier: "previewSegue", sender: post)
}
override func prepare(for segue: UIStoryboardSegue, sender: Any?) {
if let destination = segue.destination as? PreviewVC {
if let update = sender as? Post, let update2 = sender as? Post {
destination.locationData = update
destination.addressData = update2
}
}
}
}
&#13;
我的代码运行,我可以打印Lat和Long,但我不知道如何将它们添加到地图中。我应该制作另一个VC并将数据放入那里吗?我不知道该改变什么,但是,我还需要帮助!
答案 0 :(得分:4)
在print(lat,long)
let annotation = MKPointAnnotation()
annotation.coordinate = CLLocationCoordinate2DMake(lat, long)
annotation.title = "Hello!" // if you need title, add this line
self.mapView.addAnnotation(annotation)
class ViewController: UICollectionViewController, UICollectionViewDelegateFlowLayout {
let detailVC = DetailVC()
let animationController = AnimationController()
override func viewDidLoad() {
super.viewDidLoad()
collectionView?.delegate = self
collectionView?.dataSource = self
detailVC.transitioningDelegate = self
collectionView?.register(ControllerCell.self, forCellWithReuseIdentifier: "klk")
collectionView?.isPagingEnabled = false
collectionView?.contentInset = UIEdgeInsets(top: 0, left: 80, bottom: 0, right: 10)
let layout = collectionView?.collectionViewLayout as? UICollectionViewFlowLayout
layout?.scrollDirection = .horizontal
}
override func collectionView(_ collectionView: UICollectionView, numberOfItemsInSection section: Int) -> Int {
return 5
}
override func collectionView(_ collectionView: UICollectionView, cellForItemAt indexPath: IndexPath) -> UICollectionViewCell {
let cell = collectionView.dequeueReusableCell(withReuseIdentifier: "klk", for: indexPath) as! ControllerCell
return cell
}
func collectionView(_ collectionView: UICollectionView, layout collectionViewLayout: UICollectionViewLayout, sizeForItemAt indexPath: IndexPath) -> CGSize {
return CGSize(width: view.frame.width * 0.6, height: view.frame.height * 0.5)
}
func collectionView(_ collectionView: UICollectionView, layout collectionViewLayout: UICollectionViewLayout, minimumLineSpacingForSectionAt section: Int) -> CGFloat {
return 100
}
override func collectionView(_ collectionView: UICollectionView, didSelectItemAt indexPath: IndexPath) {
let cell = collectionView.cellForItem(at: indexPath)
animationController.originFrame = cell?.frame
present(DetailVC(), animated: true, completion: nil)
}
}
extension ViewController: UIViewControllerTransitioningDelegate {
func animationController(forPresented presented: UIViewController, presenting: UIViewController, source: UIViewController) -> UIViewControllerAnimatedTransitioning? {
return animationController
}
}