快速浏览一下文档就会发现其中的魔力。
将userTrackingMode
地图的 设置为MKUserTrackingModeFollow
。
见这里。
更新:
由于您已经更新了问题,因此这是新的答案。
要将地图重新定位到用户位置,我建议编写一个简单的辅助方法:
- (void)recenterUserLocation:(BOOL)animated{
MKCoordinateSpan zoomedSpan = MKCoordinateSpanMake(1000, 1000);
MKCoordinateRegion userRegion = MKCoordinateRegionMake(self.mapView.userLocation.coordinate, zoomedSpan);
[self.mapView setRegion:userRegion animated:animated];
}
现在,如果用户停止移动地图,您应该在短暂延迟后调用它。您可以regionDidChange
在 mapView 的委托方法中执行此操作。
但是,如果用户在真正重置地图之前多次更改区域,则如果不锁定重置方法,则会出现问题。因此,如果可以重新定位地图,则制作标志是明智的。就像一个财产BOOL canRecenter
。
初始化它YES
并将方法更新recenterUserLocation
为:
- (void)recenterUserLocation:(BOOL)animated{
MKCoordinateSpan zoomedSpan = MKCoordinateSpanMake(1000, 1000);
MKCoordinateRegion userRegion = MKCoordinateRegionMake(self.mapView.userLocation.coordinate, zoomedSpan);
[self.mapView setRegion:userRegion animated:animated];
self.canRecenter = YES;
}
现在,您可以在用户以任何方式移动地图后安全地调用它,但会有一点延迟:
- (void)mapView:(MKMapView *)mMapView regionDidChangeAnimated:(BOOL)animated{
if (self.canRecenter){
self.canRecenter = NO;
[self performSelector:@selector(recenterUserLocation:) withObject:@(animated) afterDelay:3];
}
}