0

ドラッグできる現在の検索場所を表示するために使用する注釈ピンがあります。この注釈は単なる通常の MKPointAnnotation であり、viewForAnnotation メソッドで画像を変更します。これは、注釈のドラッグを開始するまでは問題ありません。その後、注釈がデフォルトの赤いピンに変わり、設定したカスタム イメージが失われます。

次のように注釈を作成して追加します。

MKPointAnnotation *userAnnotation = [[MKPointAnnotation alloc] init];
[userAnnotation setCoordinate:userCoordinate];
[userAnnotation setTitle:@"My Location"];
[userAnnotation setSubtitle:@"Drag to move - Press to reset"];

[self.mapView addAnnotation:userAnnotation];

次に、annotationView を次のように設定します。

- (MKAnnotationView *)mapView:(MKMapView *)mapView viewForAnnotation:(id <MKAnnotation>)annotation {
....
[annotationView setImage:[UIImage imageNamed:@"locationpin"]];
[annotationView setDraggable:YES];
[annotationView.layer setZPosition:999];
return annotationView;

そして、メソッド didChangeDragState: fromState: を次のように実装します。

- (void)mapView:(MKMapView *)mapView
 annotationView:(MKAnnotationView *)annotationView
didChangeDragState:(MKAnnotationViewDragState)newState
   fromOldState:(MKAnnotationViewDragState)oldState {

    if (newState == MKAnnotationViewDragStateEnding) {
        CLLocationCoordinate2D droppedAt = annotationView.annotation.coordinate;
        self.mockLocation = [[CLLocation alloc] initWithLatitude:droppedAt.latitude longitude:droppedAt.longitude];

        NSLog(@"%@ mock location set to %f %f", [self class], droppedAt.latitude, droppedAt.longitude);

        [self plotStations];
    }
}

iOS 6 でのこの問題は覚えていませんが、iOS 7 には確かに存在します。

では、ドラッグ前、ドラッグ中、ドラッグ後にイメージを保持するにはどうすればよいでしょうか?

4

1 に答える 1

0

私もこの問題を抱えていました。viewForAnnotationで「MKPinAnnotationView」から「MKAnnotationView」に変更することで、これを解決できました。

このようなもの:

- (MKAnnotationView *) mapView: (MKMapView *) mapView viewForAnnotation: (id<MKAnnotation>) annotation
{
    MKAnnotationView *pin = (MKAnnotationView *) [mapView dequeueReusableAnnotationViewWithIdentifier:@"my_pin"];
    if (pin == nil) {
        pin = [[MKAnnotationView alloc] initWithAnnotation: annotation reuseIdentifier:@"my_pin"];

    } else {
        pin.annotation = annotation;
    }

    pin.draggable = YES;
    pin.image = [UIImage imageNamed:@"img_map_pin"];
    pin.selected = YES;

    return pin;
}

違いは、ドラッグ アンド ドロップではピン ドロップのアニメーションが表示されないことです。

それが誰かを助けることを願っています。

于 2014-01-26T15:07:26.367 に答える