MKAnnotationView不可拖动,虽然我认为它已正确实现?

时间:2012-09-23 21:55:49

标签: iphone ios mapkit mkannotation

我尝试在我的新应用中添加MKMapView。我创建了一个自定义的MKAnnotationView - >所以我可以改变别针的图像。一切正常,直到我试图拖动别针。无论我做什么,它都不会。还有一件事要说; MapView是一个大tableView单元格的子视图。但平移和缩放工作正常,所以我不认为它与此有关......

这是我的代码:

MKAnnotation

@interface MyAnnotation : NSObject <MKAnnotation> {


}


//MKAnnotation
@property (nonatomic, assign) CLLocationCoordinate2D coordinate;

@end

@implementation MyAnnotation
@synthesize coordinate;


@end

MKAnnotationView

@interface MyAnnotationView : MKAnnotationView {

}

@end

@implementation MyAnnotationView

- (id)initWithFrame:(CGRect)frame
{
    self = [super initWithFrame:CGRectMake(self.frame.origin.x, self.frame.origin.y, 38, 43)];
    if (self) {
        // Initialization code
        UIImage* theImage = [UIImage imageNamed:@"partyPin.png"];

        if (!theImage)
            return nil;
        self.image = theImage;
    }
    return self;
}

@end

MapView所在的视图 - 委托方法 - 不包括我初始化MKAnnotation的部分和“addAnnotation”

- (MKAnnotationView *)mapView:(MKMapView *)lmapView viewForAnnotation:(id <MKAnnotation>)annotation {

    MyAnnotationView *myAnnotationView = (myAnnotationView *)[lmapView dequeueReusableAnnotationViewWithIdentifier:@"myView"];
    if(myAnnotationView == nil) {
        myAnnotationView = [[MyAnnotationView alloc] initWithAnnotation:annotation reuseIdentifier:@"myView"];
    }

    myAnnotationView.draggable = YES;
    myAnnotationView.annotation = annotation;

    return myAnnotationView;
}

- (void)mapView:(MKMapView *)mapView annotationView:(MKAnnotationView *)annotationView didChangeDragState:(MKAnnotationViewDragState)newState fromOldState:(MKAnnotationViewDragState)oldState
{
    if (newState == MKAnnotationViewDragStateEnding)
    {
        CLLocationCoordinate2D droppedAt = annotationView.annotation.coordinate;
        NSLog(@"dropped at %f,%f", droppedAt.latitude, droppedAt.longitude);
    }
}

有人看到我错过了吗?

非常感谢!

1 个答案:

答案 0 :(得分:4)

要使注释可拖动,它必须实现setCoordinate方法。仅将视图的draggable属性设置为YES是不够的。

您的注记类已将coordinate定义为readonly

相反,将其定义为readwriteassign并删除coordinate方法(以及latitudelongitude ivars和属性,因为您'我能够直接设置坐标。)

同时添加@synthesize coordinate,这样您就不必手动编写getter / setter。