我在 MKMapView 上添加了一个 MKAnnotationView,当我长按它时,我希望它可以被抬起并移动到另一个位置。
如何?特别感谢!
从 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;
}
跟踪用户的触摸并相应地移动 pin 视图。查看本页底部的 DDAnnotationView:http: //digdog.tumblr.com/post/252784277/mapkit-annotation-drag-and-drop-with-callout-info
当用户停止拖动时,将视图位置转换为地图坐标并更改注释坐标。为图钉添加一些动画。
这是一个工作示例:https ://github.com/digdog/MapKitDragAndDrop尝试将 DDAnnotationView 和 DDAnnotation 类添加到您的项目中,并使用此行下方的 MKMapViewDelegate 方法。