当用户滚动地图时,将引脚(MKAnnotation)保持在中心位置

时间:2015-04-21 12:03:53

标签: ios swift mkmapview mkannotation

当用户像Careem应用程序一样挖掘地图时,我想将MKAnnotaion保留在屏幕的中心位置:

enter image description here

到目前为止,我设法显示引脚,更新引脚位置但是当我滚动地图时,我的代码中的注释最初会移动然后返回到中心。我希望别针留在中心位置。

  @IBOutlet var mapView: MKMapView!
  var centerAnnotation = MKPointAnnotation()
  var manager:CLLocationManager!

 override func viewDidLoad() {
    super.viewDidLoad()
    manager = CLLocationManager() //instantiate
    manager.delegate = self // set the delegate
    manager.desiredAccuracy = kCLLocationAccuracyBest // required accurancy

    manager.requestWhenInUseAuthorization() // request authorization
    manager.startUpdatingLocation() //update location

    var lat = manager.location.coordinate.latitude // get lat
    var long = manager.location.coordinate.longitude // get long
    var coordinate = CLLocationCoordinate2DMake(lat, long)// set coordinate

    var latDelta:CLLocationDegrees = 0.01 // set delta
    var longDelta:CLLocationDegrees = 0.01 // set long
    var span:MKCoordinateSpan = MKCoordinateSpanMake(latDelta, longDelta)
    var region:MKCoordinateRegion = MKCoordinateRegionMake(coordinate, span)

    self.mapView.setRegion(region, animated: true)
    centerAnnotation.coordinate = mapView.centerCoordinate
    self.mapView.addAnnotation(centerAnnotation)
}

func mapView(mapView: MKMapView!, regionDidChangeAnimated animated: Bool) {
    centerAnnotation.coordinate = mapView.centerCoordinate;
}

****更新****

正如安娜所说,我已经在地图上添加了一个视图。代码如下:

var newPoint = self.mapView.convertCoordinate(mapView.centerCoordinate, toPointToView: self.view)



    var pinImage = UIImage(named: "yoga_pins.png")
    var imageView = UIImageView(image: pinImage) // set as you want

    imageView.image = pinImage
    imageView.backgroundColor = UIColor.clearColor()
    imageView.contentMode = UIViewContentMode.Center
    imageView.center.y = newPoint.y
    imageView.center.x = newPoint.x


    self.view.addSubview(imageView)

唯一的问题是,当第一次加载地图时,位于mapView.centerCoordinate上的注释将用于获取纬度和经度:

enter image description here

当我滚动地图时,针脚移动到正确位置(图像下方):

    func mapView(mapView: MKMapView!, regionDidChangeAnimated animated: Bool) {
    centerAnnotation.coordinate = mapView.centerCoordinate;

}

enter image description here

2 个答案:

答案 0 :(得分:0)

您可以使用自定义按钮。在地图中心添加该按钮。只需根据您的条件显示和隐藏该按钮即可。 因此,当您移动地图时,该按钮会停留在地图中心的同一位置。 SO answer

答案 1 :(得分:0)

我推荐您DSCenterPinMapView

这是一个自定义MapView,带有一个动画且可自定义的中心图钉,可用于选择地图中的位置。

您应该安装Pod,然后作为问题的解决方案,您应该实现委托,以便获得销钉掉落的位置。

pinMapView.delegate = self

extension MyViewController: DSCenterPinMapViewDelegate {

    func didStartDragging() {
        // My custom actions
    }

    func didEndDragging() {
        // My custom actions
        selectedLocation = pinMapView.mapview.centerCoordinate
    }

}