0

谁能推荐一个MKPinAnnotationView在 iPhone中实现拖动功能的好教程MKMapView

4

2 回答 2

4

您可以从此链接找到 MKPinAnnotationView 拖放功能的源代码演示。

更新:上述站点 url 中给出的 Github 项目链接不起作用。但我从这个url找到了新的项目示例。

于 2012-12-24T05:44:56.543 回答
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);
    }
}

这应该有帮助!

于 2012-12-24T05:15:27.223 回答