2

我在 MKMapView 上添加了一个 MKAnnotationView,当我长按它时,我希望它可以被抬起并移动到另一个位置。

如何?特别感谢!

4

1 回答 1

3

对于 iOS 4.0 或更高版本

从 Apple's Location Awareness Guide > Marking Your Annotation View as Draggable

要实现对拖动的最小支持,您必须执行以下操作:

  • 在您的注释对象中,实现 setCoordinate: 方法以允许地图视图更新注释的坐标点。

  • 创建注释视图时,将其可拖动属性设置为 YES。

实现 setCoordinate:

#import <MapKit/MapKit.h>
@interface mapAnnotation : NSObject<MKAnnotation> {
    double latitude, longitude; 
}
@end

@implementation mapAnnotation
- (void)setCoordinate:(CLLocationCoordinate2D)coordinate{
    latitude = coordinate.latitude;
    longitude = coordinate.longitude;
}

-(CLLocationCoordinate2D)coordinate {
    CLLocationCoordinate2D coordinate = {latitude,longitude};
    return coordinate;
}
// ...
@end

在视图控制器中创建注释视图:

- (MKAnnotationView *)mapView:(MKMapView *)mapView viewForAnnotation:(id <MKAnnotation>)annotation
{
    static NSString * const identifier = "identifier";
    MKPinAnnotationView *pinView = (MKPinAnnotationView*)[mapView dequeueReusableAnnotationViewWithIdentifier:identifier];
    if (pinView ==nil) {
        pinView = [[MKPinAnnotationView alloc]initWithAnnotation:annotation reuseIdentifier:identifier];
        pinView.animatesDrop = YES;
        pinView.draggable = YES;    
    }
    return pinView;
}

适用于任何 iOS 版本

跟踪用户的触摸并相应地移动 pin 视图。查看本页底部的 DDAnnotationView:http: //digdog.tumblr.com/post/252784277/mapkit-annotation-drag-and-drop-with-callout-info

当用户停止拖动时,将视图位置转换为地图坐标并更改注释坐标。为图钉添加一些动画。

这是一个工作示例:https ://github.com/digdog/MapKitDragAndDrop尝试将 DDAnnotationView 和 DDAnnotation 类添加到您的项目中,并使用此行下方的 MKMapViewDelegate 方法。

于 2012-10-23T15:40:51.540 回答