[objective-c]不缩放到用户位置的地图视图

发布时间: 2017/3/27 3:07:45
注意事项: 本文中文内容可能为机器翻译,如要查看英文原文请点击上面连接.

我的地图视图不缩放到我的用户位置。你可以请指出错误︰

- (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:

正在创建的地图视图,但不是设置其框架和它不被作为子视图的视图控制器视图添加。

更改分配 + 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 国旗埃法尔和检查/套它相应地,它将调用。

官方微信
官方QQ群
31647020