放大地图上的当前位置

时间:2014-08-13 09:46:04

标签: ios objective-c

我想在地图上显示用户的当前位置并放大。

我尝试如下:

- (id)initWithNibName:(NSString *)nibNameOrNil bundle:(NSBundle *)nibBundleOrNil
{
    self = [super initWithNibName:nibNameOrNil bundle:nibBundleOrNil];
    if (self) {
        NSLog(@"Init MapViewController");
        [self initMap];
    }
    return self;
}


-(void) initMap
{
    _mapView = [[MKMapView alloc] initWithFrame:self.view.frame];

    _mapView.delegate = self;
    _mapView.showsUserLocation = YES;

    [self.view addSubview:_mapView];

    CLLocationCoordinate2D currentLocation;
    currentLocation.latitude = _mapView.userLocation.coordinate.latitude;
    currentLocation.longitude= _mapView.userLocation.coordinate.longitude;

    MKCoordinateRegion viewRegion = MKCoordinateRegionMakeWithDistance(currentLocation, 0.5*METERS_PER_MILE, 0.5*METERS_PER_MILE);

    [_mapView setRegion:viewRegion animated:YES];
}

然后在模拟器中它显示了海中的位置。我在模拟器中将位置设置为伦敦。

2 个答案:

答案 0 :(得分:2)

这样做:

@property  (strong, nonatomic)   CLLocationManager *locationManager;

在viewdidload中:

self.locationManager = [[CLLocationManager alloc] init] ;
self.locationManager.delegate = (id)self;
self.locationManager.desiredAccuracy = kCLLocationAccuracyBestForNavigation ;
[self.locationManager setDistanceFilter:10.0f] ;
[self.locationManager startUpdatingLocation];

在你的位置经理

- (void)locationManager:(CLLocationManager *)manager didUpdateToLocation:(CLLocation *)newLocation
       fromLocation:(CLLocation *)oldLocation
{
    [self.locationManager stopUpdatingLocation];
    CLLocationCoordinate2D zoomLocation;
    zoomLocation.latitude = YourMapView.userLocation.location.coordinate.latitude;
    zoomLocation.longitude= YourMapView.userLocation.location.coordinate.longitude;
    // 2
    MKCoordinateRegion viewRegion = MKCoordinateRegionMakeWithDistance(zoomLocation, 0.5*1609.344, 0.5*1609.344);
    // 3
    [YourMapView setRegion:viewRegion animated:YES];
}

答案 1 :(得分:0)

我需要收听用户位置的更改。因为在视图中,didload的位置是未知的。

-(void)observeValueForKeyPath:(NSString *)keyPath ofObject:(id)object change:(NSDictionary *)change context:(void *)context
{
    MKCoordinateRegion region;
    region.center = self.mapView.userLocation.coordinate;

    MKCoordinateSpan span;
    span.latitudeDelta  = 1; // Change these values to change the zoom
    span.longitudeDelta = 1;
    region.span = span;

    [self.mapView setRegion:region animated:YES];
}

这在viewdidload中:

[self.mapView.userLocation addObserver:self
                            forKeyPath:@"location"
                               options:(NSKeyValueObservingOptionNew|NSKeyValueObservingOptionOld)
                               context:nil];