这里非常新手所以请原谅无知。我花了一些时间试图理解我所缺少的东西,但无法弄明白。
我的应用程序在加载时集中在华盛顿州,但是当我尝试缩放到用户当前位置时,它将我置于经度0经度0处。如果我注释掉“// startup:Center over WA”部分,它将居中于用户当前位置,然后goToLocation工作正常。
如何让它以华盛顿州为中心,然后在点击goToLocation后缩放到用户的当前位置?
谢谢!
- (void)viewDidLoad {
[super viewDidLoad];
[self loadOurAnnotations];
[mapView setShowsUserLocation:NO];
// startup: center over WA
CLLocationCoordinate2D defaultCoordinate;
defaultCoordinate.latitude = 47.517201;
defaultCoordinate.longitude = -120.366211;
[mapView setRegion:MKCoordinateRegionMake(defaultCoordinate, MKCoordinateSpanMake(6.8, 6.8)) animated:NO];
}
-(IBAction)goToLocation {
MKUserLocation *myLocation = [mapView userLocation];
CLLocationCoordinate2D coord = [[myLocation location] coordinate];
MKCoordinateRegion region = MKCoordinateRegionMakeWithDistance(coord, 350, 350);
[mapView setRegion:region animated:YES];
[UIView beginAnimations:nil context:NULL];
[UIView setAnimationDuration:1];
[UIView commitAnimations];
}
答案 0 :(得分:1)
首先,要在userLocation
中使用MKMapView
,您必须将YES
传递给setShowsUserLocation
(而不是NO
)。
接下来的事情是,在启用showsUserLocation
后,地图视图可能需要几秒钟或更长时间来确定位置并设置userLocation
。在此之前,位置将为零(给出坐标为0,0)。
要真正了解userLocation何时准备好(或更新),请实施didUpdateUserLocation
委托方法。如果确定用户位置有问题,实施didFailToLocateUserWithError
方法也很有帮助。
但是,在您的情况下,您可以在goToLocation
方法中执行以下操作:
MKUserLocation *myLocation = [mapView userLocation];
if (myLocation.location == nil)
{
NSLog(@"user location has not been determined yet");
return;
}
CLLocationCoordinate2D coord = [[myLocation location] coordinate];
MKCoordinateRegion region = ... //rest of the code stays the same
顺便说一下,该方法结尾处的动画语句没有做任何事情。