Полагаю, вы видите синий, потому что его местоположение (0, 0) находится посреди моря.Возможно, потому что в первый раз местоположение на CLLocationManager
еще не установлено.
Возможно, вам следует проверить, есть ли еще местоположение, а если нет, то дождаться обратного вызова в методе CLLocationManagerDelegate
* 1005.* и затем центрируйте карту в нужном месте.
Примерно так:
...
@property (nonatomic, assign) BOOL needsCentering
...
@synthesize needsCentering = _needsCentering;
- (void)viewWillAppear:(BOOL)animated {
CLLocationManager *lm = [[CLLocationManager alloc] init];
lm.delegate = self;
lm.desiredAccuracy = kCLLocationAccuracyBest;
lm.distanceFilter = kCLDistanceFilterNone;
[lm startUpdatingLocation];
CLLocation *location = [lm location];
if (!location) {
_needsCentering = YES;
} else {
_needsCentering = NO;
CLLocationCoordinate2D coord;
coord = [location coordinate];
CLLocationCoordinate2D zoomLocation;
zoomLocation.latitude = coord.latitude; //39.281516;
zoomLocation.longitude= coord.longitude; //-76.580806;
MKCoordinateRegion viewRegion = MKCoordinateRegionMakeWithDistance(zoomLocation, 0.3*METERS_PER_MILE, 0.3*METERS_PER_MILE);
MKCoordinateRegion adjustedRegion = [self.mainMapView regionThatFits:viewRegion];
[self.mainMapView setRegion:adjustedRegion animated:YES];
}
}
- (void)locationManager:(CLLocationManager *)manager didUpdateToLocation:(CLLocation *)newLocation fromLocation:(CLLocation *)oldLocation {
if (_needsCentering) {
_needsCentering = NO;
CLLocationCoordinate2D coord;
coord = [newLocation coordinate];
CLLocationCoordinate2D zoomLocation;
zoomLocation.latitude = coord.latitude; //39.281516;
zoomLocation.longitude= coord.longitude; //-76.580806;
MKCoordinateRegion viewRegion = MKCoordinateRegionMakeWithDistance(zoomLocation, 0.3*METERS_PER_MILE, 0.3*METERS_PER_MILE);
MKCoordinateRegion adjustedRegion = [self.mainMapView regionThatFits:viewRegion];
[self.mainMapView setRegion:adjustedRegion animated:YES];
}
}
Но вы также можете взглянуть на showsUserLocation
из MKMapView
.