Как можно перетащить MKPinAnnotationView пин только одним нажатием? - PullRequest
7 голосов
/ 21 февраля 2011

Я добавляю MKPinAnnotationView и setDragAble.мой код здесь

- (MKAnnotationView *)mapView:(MKMapView *)mapView viewForAnnotation:(id <MKAnnotation>)annotation {
    MKPinAnnotationView *annotationView = [[MKPinAnnotationView alloc] initWithAnnotation:annotation reuseIdentifier:@"pin"];
    [annotationView setDraggable:YES];
    annotationView.pinColor = MKPinAnnotationColorPurple;
    return [annotationView autorelease];
}

хорошо, я могу перетащить булавку.

но одна проблема - это не просто одно нажатие.всегда нужно второе нажатие.

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

что не так?я хочу перетащить одним нажатием, как "Map.app"

Ответы [ 4 ]

17 голосов
/ 22 февраля 2011

Решите эту проблему.^^

Я думаю, что для перетаскивания, контакт уже выбран.

, поэтому MKPinAnnotationView выбирается при инициализации.

мой новый код.

- (MKAnnotationView *)mapView:(MKMapView *)mapView viewForAnnotation:(id <MKAnnotation>)annotation {
    MKPinAnnotationView *annotationView = [[MKPinAnnotationView alloc] initWithAnnotation:annotation reuseIdentifier:@"pin"];
    [annotationView setDraggable:YES];
    annotationView.pinColor = MKPinAnnotationColorPurple;
    [annotationView setSelected:YES animated:YES];
    return [annotationView autorelease];
}
4 голосов
/ 08 августа 2013

Ответы здесь не учитываются, когда вы сначала нажмете на булавку и отмените ее выбор, а затем проблема перетаскивания вернется, потому что mapView отменяет выбор аннотации.Я наткнулся на новое решение, которое выбирает аннотацию, которая только что была отменена:

-(void)mapView:(MKMapView *)mapView didDeselectAnnotationView:(MKAnnotationView *)view
{
    [view setSelected:YES];
}

Это избавит вас от всех разочарований.Прелесть в том, что это все, что вам нужно!Вам вообще не нужно устанавливать штифты как выбранные.

0 голосов
/ 03 августа 2012

Обновление: Нет, я ошибаюсь.Мне до сих пор иногда требуется более одного крана.Вот мой ошибочный ответ:

Я столкнулся с этой проблемой сегодня.Кажется, это потому, что я не изменил должным образом состояние перетаскивания, как указано в документах для -setDragState: animated: (игнорируйте документы для -dragState, он никогда не вызывает setDragState:).В ответ на эти изменения ваша пользовательская реализация этого метода должна сделать следующее:

Когда состояние перетаскивания изменяется на MKAnnotationViewDragStateStarting, установите состояние MKAnnotationViewDragStateDragging.Если вы выполняете анимацию, чтобы указать начало перетаскивания, и анимированным параметром является ДА, выполните эту анимацию перед изменением состояния.Когда состояние изменяется либо на MKAnnotationViewDragStateCanceling, либо на MKAnnotationViewDragStateEnding, установите для этого состояния значение MKAnnotationViewDragStateNone.Если вы выполняете анимацию в конце перетаскивания, а анимированный параметр - ДА, вы должны выполнить эту анимацию перед изменением состояния.

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

0 голосов
/ 22 февраля 2011

Чтобы перетащить булавку, нужно нажать и удерживать, а не дважды нажать.

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

...