MapView不缩放到用户位置

时间:2011-03-05 03:04:09

标签: iphone objective-c xcode mapkit mkmapview

我的地图视图未缩放到我的用户位置。请指出错误:

- (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 :(得分:0)

正在创建mapView,但其框架未设置,并且未将其添加为视图控制器视图的子视图。

将alloc + init行更改为(根据需要更改维度):

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

然后在performSelector行之前添加:

[self.view addSubview:mapView];

但是请注意,最好使用MKMapView的didUpdateUserLocation委托方法缩放到用户的位置,而不是假设在一些任意的固定间隔(如1.25秒)后用户位置可用。

例如,删除performSelector行并实现didUpdateUserLocation:

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

使用didUpdateUserLocation方法的唯一可能的问题是每次用户的位置更改时都会调用它,所以如果你只想在启动时放大一次,你需要添加一个BOOL标志ivar并相应地检查/设置它。