Mk Mapview продолжает сбрасываться по местоположению пользователей? - PullRequest
0 голосов
/ 24 февраля 2012

В настоящее время у меня есть карта, отображающая приблизительно 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];}

Ответы [ 2 ]

1 голос
/ 24 февраля 2012

Ваше 'местоположение' - это менеджер местоположений, когда он выяснит, где вы находитесь, он отправит своего делегата

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 вы используете userLocation petrolMap вместо параметра userLocation и даже строите свой регион.Весь код этой функции может быть одной строкой

    [mapView setRegion:mapRegion animated:NO];
    
  • «Анимированные» контролируют, как осуществляется изменение в регионе.Да означает, что он будет скользить между локациями, Нет, значит, он будет мгновенно переходить от одного к другому, в любом случае карта переместится в новый регион.

  • Ваш метод viewDidLoad может быть сокращен додве строки, подобные следующим:

    [super viewDidLoad];
    self.petrolMap.delegate = self;
    

Приложение:

locationManager:didUpdateToLocation:fromLocation 

устарело в iOS6.

0 голосов
/ 01 февраля 2016

К сожалению, для вас, Джеймс, уже несколько лет, но надеюсь, это поможет другим, кто застрял в этой ситуации (например, я).

Я закончил тем, что добавил ...

[self.mapView setUserTrackingMode:MKUserTrackingModeFollow];

На мой -(void)mapView:(MKMapView *)mapView didUpdateUserLocation:(MKUserLocation *)userLocation

Обычно вы должны добавить «animated: YES» в конце, но это снова вернет его обратно в мое текущее местоположение, даже если я изменил коммандера на «NO» - поэтому попытался удалить его, и это сработало !!! 1009 *

Просто для справки весь мой код стал:

-(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;
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...