2011-02-09 3 views
0

У меня есть mapView с пользовательскими аннотациями и просто столкнулся с проблемой на iPhone бета-тестера. MapView не позволит пользователю перемещаться в любое место. Как только вы попытаетесь переместиться, он снова щелкнет по исходным координатам.MapView привязывается к исходному местоположению - помогите!

Любая идея, почему? Это не происходит в симуляторе, и я замечаю это немного на моем собственном устройстве ... но это непростая проблема на другом устройстве.

Большое спасибо!

static BOOL haveAlreadyReceivedCoordinates = NO; 

- (void)locationManager:(CLLocationManager *)manager didUpdateToLocation:(CLLocation *)newLocation fromLocation:(CLLocation *)oldLocation { 
    if(haveAlreadyReceivedCoordinates) { 
    return; 
    } 

    haveAlreadyReceivedCoordinates = YES; 

    CLLocationCoordinate2D loc = [newLocation coordinate]; 
    [mapView setCenterCoordinate:loc]; 
} 
+0

У меня это было однажды. Проверьте свои методы делегирования. Я предполагаю, что где-то в didUpdateToLocation вы говорите ему вернуться назад .... otherwhise, напишите какой-то код .... – Icky

+0

Привет, Icky ... Я обновил свой вопрос, включив мой код. Должен ли я просто включить stopUpdatingLocation, как только я закончу, чтобы избежать постоянного перемещения? –

ответ

1

Icky положил вас на правильный путь. Вы не должны постоянно обновлять центр карты до того, что вы вернетесь из диспетчера местоположений. Менеджер местоположений отправит вам всевозможные обновления.

Возможно, вы захотите использовать обновление только один раз, а затем проигнорировать будущие обновления (установив какой-то флаг), или вы можете сосредоточить карту на местоположении пользователя только тогда, когда пользователь нажимает кнопку. В последнем случае единственное, что вам нужно сделать в didUpdateToLocation:, - это сохранить новое местоположение в некоторой переменной-члене.

Причина, по которой вы не видите этого в симуляторе, заключается в том, что симулятор аппаратного обеспечения местоположения не постоянно обновляет реальный.

+0

Спасибо, nss! Это имеет гораздо больший смысл. Теперь мой вопрос: почему моя карта будет продолжать использовать новое местоположение? Или, как я могу использовать его карту только один раз? –

+0

Ну, карта использует новое местоположение, потому что вы сказали это в 'didUpdateToLocation'. Что вы можете сделать, так это сохранить логическую переменную-член (например, 'mapLocationUpdated'), которая изначально ложна. В 'didUpdateToLocation' вы должны вызвать' [mapView setCenterCoordinate: loc], только если 'mapLocationUpdated' является' false'. Вызвав это, установите для 'mapLocationUpdated' значение' true'. Кроме того, вы можете просто сказать менеджеру местоположений прекратить обновление местоположения в 'didUpdateToLocation' после того, как вы его разобрали. – nss

+0

Спасибо, nss! Меня довольно привлекает опция boolean value. Как я могу сказать 'didUpdateToLocation' только обновление, если оно ложно? –

Смежные вопросы