iPhone - исходное местоположение пользователя с CCLocationManager
Я использую этот код на iPhone 4:
- (id)init
{
self = [super initWithNibName:@"OfflineView" bundle:nil]; // ok, not perfect but for test, that works fine
if (self) {
self.locationMgr = [[CLLocationManager alloc] init];
self.locationMgr.desiredAccuracy = kCLLocationAccuracyThreeKilometers;
self.locationMgr.distanceFilter = kCLDistanceFilterNone;
self.locationMgr.headingFilter = kCLHeadingFilterNone;
self.locationMgr.delegate = self;
}
return self;
}
- (void)locationManager:(CLLocationManager *)manager didUpdateToLocation:(CLLocation *)newLocation fromLocation:(CLLocation *)oldLocation
{
// do things
}
// triggered when showing the view, first call here after the init
- (void) start
{
self.view.hidden = NO;
[self.locationMgr startUpdatingLocation];
[self.locationMgr startUpdatingHeading];
}
но метод делегата не запускается.
Он срабатывает только при движении телефона.
Как я могу начать свой процесс с действительного местоположения пользователя, когда появляется представление, не прося моего пользователя встряхнуть его телефон и сделать 100 м пробега, прежде чем он сможет что-то сделать?
2 ответа
Решение
Вы можете "заправить" его, нажав один раз на метод делегата.
- (void) start
{
self.view.hidden = NO;
[self.locationMgr startUpdatingLocation];
[self.locationMgr startUpdatingHeading];
[self locationManager: self.locationMgr didUpdateToLocation: [self.locationMgr currentLocation] fromLocation: nil];
}
Где вы называете начало:? Вы должны получить первое исправление, не двигаясь. Это асинхронный обратный вызов, поэтому может потребоваться время.
В идеале вы должны вызывать startUpdateLocation в init/viewDidLoad, а затем читать его в locationUpdate:
- (void)locationUpdate:(CLLocation *)location {
// Read location
}