导航到苹果地图上的cur位置

时间:2015-07-27 09:41:14

标签: ios swift mapkit cllocationmanager cllocation

我被要求在我的苹果地图上放一个按钮,该按钮将动画设备的当前位置,就像谷歌地图附带的默认按钮一样。

我已经尝试过实现它,但是在动画发生之前需要将近十秒钟,我需要它是即时的。

我的尝试: 我的类定义中有CLLocationMangerDelegate。

class Register2Controller: UIViewController, UIImagePickerControllerDelegate, UINavigationControllerDelegate,MKMapViewDelegate, CLLocationManagerDelegate, FBSDKSharingDelegate

我已经定义了我的locManager:

var locManager : CLLocationManager!

我有以下位置更新:

func locationManager(manager: CLLocationManager!, didUpdateLocations locations: [AnyObject]!) {
        println("in the update location")
        if (firstRetrieved){
            println("inside first retrieved")
            var locValue : CLLocationCoordinate2D = manager.location.coordinate
            let span2 = MKCoordinateSpanMake(1, 1)
            let long = locValue.longitude
            let lat = locValue.latitude
            println("in firstRetrieved function with \(lat) and \(long)")
            let loadlocation = CLLocationCoordinate2D(
                latitude: lat, longitude: long
            )
            mapView.centerCoordinate = loadlocation
            var latitude:CLLocationDegrees = loadlocation.latitude
            var longitude: CLLocationDegrees = loadlocation.longitude
            var latDelta:CLLocationDegrees = 0.5
            var longDelta:CLLocationDegrees = 0.5

            var theSpan:MKCoordinateSpan = MKCoordinateSpanMake(latDelta, longDelta)
            var curLocation:CLLocationCoordinate2D = CLLocationCoordinate2DMake(latitude, longitude)
            var theRegion:MKCoordinateRegion = MKCoordinateRegionMake(curLocation, theSpan)
            self.mapView.setRegion(theRegion, animated: true)
            if !curBtnBool {
                // I check curBtnBool to check if the user is in this function  from pressing the button to retrieve curLoc
                println("added a pin")
                addPin(loadlocation)
            }
            else{
                println("set curBtnBool to be false")
               curBtnBool = false
            }

            firstRetrieved = false
        }


    }

这是我尝试将地图设置为curPosition的按钮操作:

@IBAction func goToCurPos(sender: UIButton) {
    if curLocAccess {
        println("in the go to cur pos btn")
        firstRetrieved = true
        curBtnBool = true
        locManager.startUpdatingLocation()
    }
    else{
        println("handle if location permission denied")
    }

}

2 个答案:

答案 0 :(得分:1)

第一个解决方案:

首先,您可以添加预先制作的用户跟踪栏按钮UIToolbar

let userTrackingButton = MKUserTrackingBarButtonItem(mapView:self.mapView)

self.toolbar.setItems([userTrackingButton])

该按钮的行为与地图应用中的按钮完全相同。

第二个解决方案:

如果您必须使用自己的按钮,我建议您更改逻辑。

  1. 从MKMapView
  2. 开始跟踪用户位置

    self.mapView.setUserTrackingMode(MKUserTrackingMode.Follow, animated: true) // this will center on the user automatically.

    1. goToCurPos按钮触发器上,将地图视图置于当前用户的中心位置。

      使用您已有的代码以用户为中心。

答案 1 :(得分:0)

您可以使用mapView.userLocation获取用户当前位置。

请尝试此代码

@IBAction func goToCurPos(sender: UIButton) {
    mapView.setCenterCoordinate(mapView.userLocation.location.coordinate, animated: true)
}