Создание карты для программного отображения местоположения пользователя и аннотаций в Swift 3 - PullRequest
0 голосов
/ 12 мая 2018

Я пытаюсь воспроизвести то, что было в другом проекте, где я использовал раскадровки, используя только код.Контроллер вида, с которым я борюсь, это контроллер вида карты.

Я пытаюсь создать карту, которая показывает местоположение пользователя, при запуске приближается к подходящему уровню вокруг этого места, а затем позволяет пользователюпоместите на карту булавку, которая будет иметь наложение круга вокруг местоположения булавки.

Мне удалось создать карту и показать местоположение пользователя, но я изо всех сил пытаюсь установить область для увеличения местоположения, когдакарта запускается.Я боролся с этим пару дней.

Я знаю, что мне нужно где-нибудь использовать CLlocation2D, но я не уверен, где и как это использовать в данный момент.

Я также пытался настроить свою карту, используя функции, код пока приведен ниже (это не совсем подходящая работа из разных источников, пытающаяся сделать так, чтобы она соответствовала моей цели, поэтому извиняюсь, если она грязная)

> import UIKit 
> import MapKit 
> import CoreLocation
>
> class MapViewController: UIViewController, MKMapViewDelegate,
> CLLocationManagerDelegate {

>     var mapView: MKMapView!
>     var locationManager = CLLocationManager()
>     
> override func viewDidLoad() {
>         super.viewDidLoad()
>  
>         setupMapView()
> 
>     }
>     
>     override func viewWillAppear(_ animated: Bool) {
>         super.viewWillAppear(animated)
>         
>     }
> 
>     func setupMapView() {
>         let mapView = MKMapView()
> 
>         let leftMargin:CGFloat = 0
>         let topMargin:CGFloat = 0
>         let mapWidth:CGFloat = view.frame.size.width
>         let mapHeight:CGFloat = view.frame.size.height
> 
>         mapView.frame = CGRect(x: leftMargin, y: topMargin, width: mapWidth, height: mapHeight)
> 
>         mapView.mapType = MKMapType.standard
>         mapView.isZoomEnabled = true
>         mapView.isScrollEnabled = true
>         mapView.showsCompass = true
>         mapView.showsScale = true
>         mapView.showsUserLocation = true
>         
>         let noLocation = CLLocationCoordinate2D()
>         let span:MKCoordinateSpan = MKCoordinateSpanMake(0.05, 0.05)
>         let viewLocation = MKCoordinateRegionMake(noLocation, span)
>         
>         
>         mapView.setRegion(viewLocation, animated: true)
>         print(viewLocation)
> 
>         view.addSubview(mapView)
>     }
>  
>     //add function to create circle overlay
> 
> //    override func didReceiveMemoryWarning() { //       
> super.didReceiveMemoryWarning() //        // Dispose of any resources
> that can be recreated. //    }
>     
> 
>     /*
>     // MARK: - Navigation
> 
>     // In a storyboard-based application, you will often want to do a little preparation before navigation
>     override func prepare(for segue: UIStoryboardSegue, sender: Any?) {
>         // Get the new view controller using segue.destinationViewController.
>         // Pass the selected object to the new view controller.
>     }
>     */
> 
> }

Для вывода в раскадровке я использовал

@ IBAction func pinDrop (_ sender: UILongPressGestureRecognizer)

, но я не уверен, как перевести это в программный код.

Любая помощь будет отличной!

1 Ответ

0 голосов
/ 13 мая 2018

Добавить длительное нажатие, как это

let longPress = UILongPressGestureRecognizer(target: self, action: #selector(self.addAnnotation(_:)))

self.mapView.addGestureRecognizer(longPress)

//

получить координаты нажатия

@objc func addAnnotation(_ gestureRecognizer:UIGestureRecognizer)
{

   if gestureRecognizer.state != UIGestureRecognizerState.began
    {
      return
    }
     let touchPoint = gestureRecognizer.location(in: self.mapView)
     let newCoordinates = self.mapView.convert(touchPoint, toCoordinateFrom: self.mapView)

}

//

 let noLocation =  self.mapView.userLocation.coordinate

 let span:MKCoordinateSpan = MKCoordinateSpanMake(0.05, 0.05)

 let viewLocation = MKCoordinateRegionMake(noLocation, span)

 mapView.setRegion(viewLocation, animated: true)
...