实现MKPinAnnotationView拖动功能?

时间:2012-12-24 04:42:07

标签: iphone ios mkmapview draggable mkpinannotationview

有人可以推荐一个很好的教程来实现iPhone MKPinAnnotationViewMKMapView的拖动功能吗?

2 个答案:

答案 0 :(得分:4)

你可以找到MKPinAnnotationView的源代码演示Drag&从this链接中删除功能。

更新:上述网站网址中提供的Github项目链接无效。但我从this url找到了新的项目示例。

答案 1 :(得分:3)

要使注释可拖动,请将注释视图的可拖动属性设置为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);
    }
}

这应该有帮助!