Ответ 1
Я исправил эту проблему с помощью логического, которое отслеживает изменения кода/центра, вызванного кодом. Не самое изящное решение, но оно работает как шарм. Это позор. UIMapView не является результатом UIScrollView.
INIT:
regionChangeFromCode = FALSE;
действие кнопки:
-(IBAction) butCenterPressed:(id)sender
{
butCenter.selected = !butCenter.selected;
if(butCenter.selected)
[self setCenter];
}
установить центр:
-(void) setCenter
{
regionChangeFromCode = TRUE; //before setCenterCoordinate, otherwise this is FALSE in regionWillChangeAnimated
[theMap setCenterCoordinate:[self calcCenter]]; //this could also be [theMap setRegion]. Works the same
}
и делегат карты:
- (void)mapView:(MKMapView *)mapView regionWillChangeAnimated:(BOOL)animated
{
if(!regionChangeFromCode) //so a user did it
{
if(butCenter.selected)
butCenter.selected = FALSE;
}
regionChangeFromCode = FALSE;
}
В дополнение к этому у меня есть цикл обновления, который обновляет местоположение и вызывает setCenter. Когда выбрана кнопка, центр карты следует, а в остальном центр остается один.