我被要求在我的苹果地图上放一个按钮,该按钮将动画设备的当前位置,就像谷歌地图附带的默认按钮一样。
我已经尝试过实现它,但是在动画发生之前需要将近十秒钟,我需要它是即时的。
我的尝试: 我的类定义中有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")
}
}
答案 0 :(得分:1)
第一个解决方案:
首先,您可以添加预先制作的用户跟踪栏按钮UIToolbar
。
let userTrackingButton = MKUserTrackingBarButtonItem(mapView:self.mapView)
self.toolbar.setItems([userTrackingButton])
该按钮的行为与地图应用中的按钮完全相同。
第二个解决方案:
如果您必须使用自己的按钮,我建议您更改逻辑。
self.mapView.setUserTrackingMode(MKUserTrackingMode.Follow, animated: true)
// this will center on the user automatically.
在goToCurPos
按钮触发器上,将地图视图置于当前用户的中心位置。
使用您已有的代码以用户为中心。
答案 1 :(得分:0)
您可以使用mapView.userLocation
获取用户当前位置。
请尝试此代码
@IBAction func goToCurPos(sender: UIButton) {
mapView.setCenterCoordinate(mapView.userLocation.location.coordinate, animated: true)
}