Вы можете использовать UIGestureRecognizer
, чтобы помочь синхронизировать карты, когда пользователь манипулирует одной из карт.
Например, при использовании UIPanGestureRecognizer
обработчик действия распознавателя жестов будет срабатывать несколько раз, пока пользователь выполняет панорамирование карты - в отличие от regionDidChangeAnimated
, который срабатывает только после завершения панорамирования.
Вам нужно будет добавить распознаватель жестов на одну или обе карты и реализовать свой собственный метод обработчика жестов. Также реализуйте метод делегата shouldRecognizeSimultaneouslyWithGestureRecognizer
и возвращайте YES
, чтобы ваш обработчик жестов мог работать вместе с картой.
Пример:
//add the gesture handler to map(s)...
UIPanGestureRecognizer *pgr = [[UIPanGestureRecognizer alloc]
initWithTarget:self action:@selector(gestureHandler:)];
pgr.delegate = self;
[mapViewA addGestureRecognizer:pgr];
[pgr release];
//...
- (BOOL)gestureRecognizer:(UIGestureRecognizer *)gestureRecognizer
shouldRecognizeSimultaneouslyWithGestureRecognizer:
(UIGestureRecognizer *)otherGestureRecognizer
{
return YES;
}
- (void)gestureHandler:(UIGestureRecognizer *)gestureRecognizer
{
[mapViewB setRegion:mapViewA.region animated:NO];
}
Если вы хотите добавить распознаватель жестов к обоим, вам нужно создать отдельный экземпляр для каждой карты (т. Е. Вы не можете добавить pgr
к обеим картам). Вы также можете / нужно добавить UIPinchGestureRecognizer
и UITapGestureRecognizer
. Вы можете использовать один и тот же метод-обработчик для всех распознавателей.
Я бы все-таки реализовал regionDidChangeAnimated
на всякий случай, если жест пропущен.