我目前有一张显示10个左右坐标的地图。地图会在打开后立即获取用户位置并以其为中心。当平移页面或缩放不同的级别时,它最终会重置并居中于用户的第一个位置。我已尝试“停止更新位置”并将动画设置为“否”。当用户滚动时,我无法让它保持在位置地图。
- (void)viewDidLoad {
[super viewDidLoad];
self.petrolMap.delegate = self;
self.location = [[CLLocationManager alloc] init];
[location setDelegate:self];
[location setDistanceFilter:0]; // Do not apply a distance filter to the map
[location setDesiredAccuracy:kCLLocationAccuracyBest]; // Use the best accuracy possible when displaying the map
petrolMap.delegate=self; // Display on "Petrol Map" , the mapview for the application}
-(void) mapView:(MKMapView *)mapView didUpdateUserLocation:(MKUserLocation *)userLocation{MKCoordinateRegion mapRegion;
mapRegion.center = petrolMap.userLocation.coordinate;
mapRegion.span.latitudeDelta=0.02;
mapRegion.span.longitudeDelta=0.02;
[petrolMap setRegion:mapRegion animated:NO];}
答案 0 :(得分:1)
您的“位置”是位置管理员,当它在您所在的地方运行时,它会发送其代表
locationManager:didUpdateToLocation:fromLocation:
你似乎没有,所以你所做的所有“位置”设置都被浪费了(就你给我们的代码而言,它可能在其他地方有用)并告诉它停止跟踪用户没用。
“(void)mapView:(MKMapView *)mapView didUpdateUserLocation:(MKUserLocation *)userLocation {MKCoordinateRegion mapRegion;”是petrolMap发送给其代表的内容。在某处你必须设置petrolMap来跟踪用户,它可以在.xib中完成。
无论如何,要停止petrolMap发送消息,请确保运行
[petrolMap setUserTrackingMode:MKUserTrackingModeNone animated:NO];
一些额外的说明:
在didUpdateUserLocation中,您不需要直接引用petrolMap,因为mapView参数设置为MKMapView发送消息的参数。
同样在didUpdateUserLocation中,您使用的是petrolMap的userLocation而不是参数userLocation,甚至可以构建您的区域。该函数的整个代码可以是一行
[mapView setRegion:mapRegion animated:NO];
'动画'控制区域更改的完成方式。是的意思是它会在不同地点之间滑动,否则意味着它会立即从一个地方突然移动到另一个地方,无论地图将移动到新地区。
您的viewDidLoad方法可以剪切为两行,如下所示
[super viewDidLoad];
self.petrolMap.delegate = self;
附录:
locationManager:didUpdateToLocation:fromLocation
在iOS6中已弃用。
答案 1 :(得分:0)
不幸的是,对于詹姆斯来说这是几年到晚了 - 但希望它会帮助那些陷入困境的人(像我一样)。
我最后加了......
[self.mapView setUserTrackingMode:MKUserTrackingModeFollow];
进入我的-(void)mapView:(MKMapView *)mapView didUpdateUserLocation:(MKUserLocation *)userLocation
您通常应添加"动画:是"最后,但是这又将它回到我当前的位置,即使我把指挥官改成了#34; NO" - 所以尝试删除它,它工作!!!
仅供参考,我的整个代码变为:
-(void)mapView:(MKMapView *)mapView didUpdateUserLocation:(MKUserLocation *)userLocation{
if(userLocationShown) return;
MKCoordinateRegion region;
MapView.showsUserLocation = YES;
region.center.latitude = MapView.userLocation.coordinate.latitude;
region.center.longitude = MapView.userLocation.coordinate.longitude;
region.span = MKCoordinateSpanMake(0.02,0.02);
[MapView setRegion:region animated:YES];
[self.mapView setUserTrackingMode:MKUserTrackingModeFollow];
[locationManager startUpdatingLocation];
[locationManager stopUpdatingLocation];
userLocationShown = YES;
我添加了......
- (void)viewDidLoad {
[super viewDidLoad];
[locationManager setDistanceFilter:kCLDistanceFilterNone];
[locationManager setDesiredAccuracy:kCLLocationAccuracyBest];
MapView.delegate = self;