我的地图视图未缩放到我的用户位置。请指出错误:
- (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);
}
答案 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并相应地检查/设置它。