MapView не масштабируется до местоположения пользователя - PullRequest
0 голосов
/ 05 марта 2011

Мое представление карты не масштабируется до моего местоположения пользователя.Пожалуйста, вы можете указать на ошибку:

- (void)viewDidLoad {
[super viewDidLoad];
mapView = [[MKMapView alloc] init];
mapView.showsUserLocation = YES;
mapView.mapType = MKMapTypeHybrid;
mapView.delegate = self;

[self performSelector:@selector(startupZoom) withObject:nil afterDelay:1.25];
}
- (void)startupZoom {
MKCoordinateRegion region;
MKCoordinateSpan span;
span.latitudeDelta=0.2;
span.longitudeDelta=0.2;
CLLocationCoordinate2D location=mapView.userLocation.coordinate;
location.latitude=mapView.userLocation.coordinate.latitude;
location.longitude=mapView.userLocation.coordinate.longitude;
region.span=span;
region.center=location;
[mapView setRegion:region animated:TRUE];
[mapView regionThatFits:region];
NSLog(@"%f, %f", mapView.userLocation.coordinate.latitude, mapView.userLocation.coordinate.longitude);
}

1 Ответ

0 голосов
/ 05 марта 2011

Создается mapView, но его кадр не задан, и он не добавляется как подпредставление представления контроллера представления.

Измените строку alloc + init (измените размеры по мере необходимости):

mapView = [[MKMapView alloc] initWithFrame:CGRectMake(0, 0, 320, 300)];

Затем перед строкой executeSelector добавьте следующее:

[self.view addSubview:mapView];

Обратите внимание, однако, что лучше использовать метод делегата MKMapView didUpdateUserLocation для масштабирования до местоположения пользователя, а не предполагатьместоположение пользователя будет доступно через некоторый произвольный фиксированный интервал, например, 1,25 секунды.

Например, удалите строку executeSelector и реализуйте didUpdateUserLocation:

- (void)mapView:(MKMapView *)mapView 
            didUpdateUserLocation:(MKUserLocation *)userLocation
{
    [self startupZoom];
}

Единственная возможная проблема, связанная с использованием метода didUpdateUserLocation, заключается в том, чтоон будет вызываться каждый раз, когда изменяется местоположение пользователя, поэтому, если вы хотите увеличить масштаб только один раз при запуске, вам нужно добавить флаг BOOL ivar и проверить / установить его соответствующим образом.

...