Как я могу сосредоточиться на определенном месте, а затем увеличить текущее местоположение - PullRequest
1 голос
/ 03 сентября 2011

Очень новичок здесь, так что, пожалуйста, прости невежество.Я потратил некоторое время, пытаясь понять, чего мне не хватает, но не могу понять.

Мое приложение при загрузке центрируется по штату Вашингтон, но когда я пытаюсь приблизиться к текущему местоположению пользователя, оно помещает меня на широту 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 Ответ

1 голос
/ 03 сентября 2011

Во-первых, чтобы использовать 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

Кстати, операторы анимации в конце этого метода ничего не делают.

...