iOS - MKMapView - 可拖动注释

Posted

技术标签:

【中文标题】iOS - MKMapView - 可拖动注释【英文标题】:iOS - MKMapView - Draggable Annotations 【发布时间】:2012-08-09 07:00:37 【问题描述】:

我已经准备好注释,但试图弄清楚如何使用我的代码使其可拖动:

-(IBAction) updateLocation:(id)sender

    MKCoordinateRegion newRegion;

    newRegion.center.latitude = mapView.userLocation.location.coordinate.latitude;
    newRegion.center.longitude = mapView.userLocation.location.coordinate.longitude;

    newRegion.span.latitudeDelta = 0.0004f;
    newRegion.span.longitudeDelta = 0.0004f;

    [mapView setRegion: newRegion animated: YES];


    CLLocationCoordinate2D coordinate;
    coordinate.latitude = mapView.userLocation.location.coordinate.latitude;
    coordinate.longitude = mapView.userLocation.location.coordinate.longitude;

    MKPointAnnotation *annotation = [[MKPointAnnotation alloc] init];

    [annotation setCoordinate: coordinate];
    [annotation setTitle: @"Your Car is parked here"];
    [annotation setSubtitle: @"Come here for pepsi"];


    [mapView addAnnotation: annotation];
    [mapView setZoomEnabled: YES];
    [mapView setScrollEnabled: YES];

提前致谢!

【问题讨论】:

【参考方案1】:

要使注释可拖动,请将注释视图的 draggable 属性设置为YES

这通常在viewForAnnotation 委托方法中完成。

例如:

- (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;
        pav.canShowCallout = YES;
    
    else
    
        pav.annotation = annotation;
    

    return pav;

如果用户停止拖拽注解需要处理,见:how to manage drag and drop for MKAnnotationView on ios?

此外,您的注释对象(实现MKAnnotation 的对象)应该有一个可设置的coordinate 属性。您正在使用实现 setCoordinateMKPointAnnotation 类,因此该部分已经处理完毕。

【讨论】:

非常感谢!我是 iOS 开发新手。 我正在使用相同的,但不知道为什么它不起作用你们有什么想法......

以上是关于iOS - MKMapView - 可拖动注释的主要内容,如果未能解决你的问题,请参考以下文章

将平移手势传递给 MKMapView

如何在 MKMapView 上添加的自定义注解中添加标题和副标题?

在启动时可靠地选择 MKMapView 中的注释(在 ios 6 和 ios 5.1 中)?

iOS 5 中无效的 MKMapView 区域

MKMapView 注释第二次不可选择

触摸结束事件后更新父视图控制器上 MKAnnotation 的坐标属性?