Реализация функции перетаскивания MKPinAnnotationView?

Кто-нибудь может предложить хороший учебник по реализации функции перетаскивания для MKPinAnnotationView в iPhone MKMapView?


person Tinku George    schedule 24.12.2012    source источник
comment
Дубликат: stackoverflow.com/questions/11927692/ и многие другие   -  person MCKapur    schedule 24.12.2012


Ответы (2)


вы можете найти демонстрацию исходного кода для функции перетаскивания MKPinAnnotationView по этой ссылке .

Обновление: ссылка на проект Github, указанная в приведенном выше URL-адресе сайта, не работает. Но я нашел новый пример проекта для этого по этот URL.

person Sunil Zalavadiya    schedule 24.12.2012

Чтобы сделать аннотацию перетаскиваемой, установите для свойства перетаскивания вида аннотации значение YES.

Обычно это делается в методе делегата viewForAnnotation, поэтому убедитесь, что вы установили для делегата MKMapView значение self и соответствуете ему в файле .h.

Например:

- (MKAnnotationView *)mapView:(MKMapView *)mapView viewForAnnotation:(id<MKAnnotation>)annotation
{
    if ([annotation isKindOfClass:[MKUserLocation class]])
        return nil;

    static NSString *reuseId = @"pin";
    MKPinAnnotationView *pav = (MKPinAnnotationView *)[mapView dequeueReusableAnnotationViewWithIdentifier:reuseId];
    if (pav == nil)
    {
        pav = [[MKPinAnnotationView alloc] initWithAnnotation:annotation reuseIdentifier:reuseId];
        pav.draggable = YES; // Right here baby!
        pav.canShowCallout = YES;
    }
    else
    {
        pav.annotation = annotation;
    }

    return pav;
}

Итак, вот код для управления действием перетаскивания аннотаций:

- (void)mapView:(MKMapView *)mapView 
    annotationView:(MKAnnotationView *)annotationView 
    didChangeDragState:(MKAnnotationViewDragState)newState 
    fromOldState:(MKAnnotationViewDragState)oldState 
{
    if (newState == MKAnnotationViewDragStateEnding) // you can check out some more states by looking at the docs
    {
        CLLocationCoordinate2D droppedAt = annotationView.annotation.coordinate;
        NSLog(@"dropped at %f,%f", droppedAt.latitude, droppedAt.longitude);
    }
}

Это должно помочь!

person MCKapur    schedule 24.12.2012