8

MKPinAnnotationView では、カスタム イメージを「ピン」として使用し、同時にドラッグを有効にすることはできません。これは、ドラッグを開始するとすぐにイメージがデフォルトのピンに戻るためです。したがって、MKPinAnnotationView の代わりに MKAnnotationView を使用します。

MKPinAnnotationView の代わりに MKAnnotationView を使用すると、カスタム画像が「ピン」として表示されたままになりますが、デフォルトのピンで得られるドラッグ アンド ドロップ アニメーションはサポートされません。

とにかく、私の問題は、カスタム 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;
}
4

3 に答える 3

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;
            }
        }
    }
于 2014-03-07T12:04:51.387 に答える
9

同じ問題があり、「setDragState」を MKAnnotationView クラスに追加して解決しました。

これは古い解決策ですが、私にはうまくいきました(iOS8)。

于 2013-09-28T11:12:29.643 に答える