如何在特定位置居中,然后缩放到当前位置

时间:2011-09-02 22:33:07

标签: ios mkmapview mapkit

这里非常新手所以请原谅无知。我花了一些时间试图理解我所缺少的东西,但无法弄明白。

我的应用程序在加载时集中在华盛顿州,但是当我尝试缩放到用户当前位置时,它将我置于经度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];
}

1 个答案:

答案 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

顺便说一下,该方法结尾处的动画语句没有做任何事情。