拖动MKAnnotationView后拖动地图不会移动MKAnnotationView

时间:2013-09-21 14:15:51

标签: ios mkmapview mkannotationview mkpinannotationview

MKPinAnnotationView不允许您将自定义图像用作“pin”并同时启用拖动,因为一旦开始拖动,图像就会更改回默认图钉。因此,我使用MKAnnotationView而不是MKPinAnnotationView。

虽然使用MKAnnotationView而不是MKPinAnnotationView确实将您的自定义图像显示为“pin”,但它不支持拖动和放大使用默认引脚删除动画。

无论如何,我的问题是,在我将自定义MKAnnotationView拖到地图上的新点然后移动地图本身后,MKAnnotationView不再随地图一起移动。

-(MKAnnotationView *)mapView:(MKMapView *)mapView viewForAnnotation:(id<MKAnnotation>)annotation {
    static NSString *defaultID = @"myLocation";

    if([self.annotation isKindOfClass:[PinAnnotation class]])
    {
        //Try to get an unused annotation, similar to uitableviewcells
        MKAnnotationView *annotationView = [self.mapView dequeueReusableAnnotationViewWithIdentifier:defaultID];

        //If one isn't available, create a new one
        if(!annotationView)
        {
            annotationView = [[MKAnnotationView alloc] initWithAnnotation:self.annotation reuseIdentifier:defaultID];
            annotationView.canShowCallout = YES;
            annotationView.draggable = YES;
            annotationView.enabled = YES;
        }
        UIImageView *imgView = [[UIImageView alloc] initWithFrame:CGRectMake(0.0, 0.0, 32, 32)];
        imgView.image = self.passableTag.image;
        annotationView.leftCalloutAccessoryView = imgView;
        annotationView.image = [UIImage imageNamed:[Constants tagIconImageNameForTagType:self.passableTag.type]];
        return annotationView;
    }
    return nil;
}

3 个答案:

答案 0 :(得分:15)

在结束拖动后,只需将annotationView.dragState设置为MKAnnotationViewDragStateNone:

    - (void)mapView:(MKMapView *)mapView annotationView:(MKAnnotationView *)view didChangeDragState:(MKAnnotationViewDragState)newState fromOldState:(MKAnnotationViewDragState)oldState {
        if ([view.annotation isKindOfClass:[PinAnnotation class]]) {
            if (newState == MKAnnotationViewDragStateEnding) {
                view.dragState = MKAnnotationViewDragStateNone;
            }
        }
    }

答案 1 :(得分:9)

我有同样的问题,我解决了将“setDragState”添加到我的MKAnnotationView类。

This是一个旧解决方案,但它对我有用(iOS8)。

答案 2 :(得分:-2)

不要重复使用MKAnnotationView,它会起作用。