/ / Поставяне на синя точка (местоположение на потребителя) Само с CLLocationManager - iphone, местоположение, mkmapview, cllocationmanager

Поставяне на синя точка (местоположение на потребителя) Само с CLLocationManager - iphone, местоположение, mkmapview, cllocationmanager

Прочетох безброй публикации тук на документите на стека и ябълките и не мога да намеря нищо за решаване на този проблем.

Проблемът е, ако зададете mapView.showsUserLocation = YES, след което MapKit ще започне да прави свои собствени заявки за GPS в телефона ви.

От документи на ябълка:

Настройването на тази собственост на причини YES изгледа на картатаза да използвате Централното местоположение рамка за намиране на ток местоположение. Докато този имот е YES, изгледа на картата продължава да се проследява местоположението на потребителя и да го актуализира периодично.

Ако искате да използвате CLLocationManager, а когато направите обаждане до [mylocationmanager startUpdatingLocation], тогава правите втора GPS заявка на телефона си.

Сега имате 2 отделни процеси, изискващи местоположение в GPS.

Не е проблем за симулатора, но ако го опитатена истински телефон ще отнеме много много време, за да получите GPS място. Също така е непоследователна 10 секунди - 1 минута, докато ако изключите mapView.showsUserLocation, това отнема много последователно 2-3 секунди.

Като цяло изглежда като много лоша практика да се използват и двете.

За гъвкавост и контрол, аз предпочитам да използвам CLLocationManager, но ако не зададете mapView.showsUserLocation = YES, тогава няма да получите синя точка!

Опитах обичайните методи за анотация на презаписване: например:

- (MKAnnotationView *) mapView:(MKMapView *)mapView viewForAnnotation:(id <MKAnnotation>) annotation
{
if ([annotation isKindOfClass:MKUserLocation.class]) {
//it"s the built-in user location annotation, return nil to get default blue dot...
return nil;
}

//handle your custom annotations...
}

Но това не работи, най-вероятно защото никога не се обаждате, за да поставите анотация на потребителя на картата.

Така че някой има ли решение да използва само CLLocationManager, за да постави местоположението на потребителя на картата?

Отговори:

0 за отговор № 1

Просто премахването на метода за преглед на анотация не е достатъчно, първо трябва да добавите анотации към картата, като се обадите

[mapView addAnnotation:annotationObject];

Вашият annotationObject може да бъде пример за всеки клас, който изпълнява протокола MKAnotnotation. Можете да намерите подробностите в Ръководство на MapKit в секцията Анотирани приложения.


0 за отговор № 2

Ако трябва да покажете просто синя точка около местоположението си (точност), можете да го направите по следния начин:

MKCircle *accuracyCircle;

-(void)locationManager:(CLLocationManager *)manager didUpdateToLocation:(CLLocation *)newLocation fromLocation:(CLLocation *)oldLocation
{
// when you want update your position and accuracy
[self.mapView removeOverlay:accuracyCircle];
accuracyCircle = [MKCircle circleWithCenterCoordinate:newLocation.coordinate
radius:newLocation.horizontalAccuracy];
[self.mapView addOverlay:accuracyCircle];
}

- (MKOverlayRenderer *)mapView:(MKMapView *)mapView rendererForOverlay:(id<MKOverlay>)overlay
{
if([overlay isKindOfClass:[MKCircle class]])
{
MKCircleRenderer * circleRenderer = [[MKCircleRenderer alloc] initWithOverlay:overlay];
circleRenderer.fillColor = [UIColor colorWithRed:0 green:1 blue:0 alpha:0.2];
return circleRenderer;
}
return nil;
}