【问题标题】:iOS 7 annotation pin image changed when pin is dragged拖动 pin 时,iOS 7 注释 pin 图像发生变化
【发布时间】:2013-09-29 20:23:19
【问题描述】:

我有一个注释图钉,用于显示可以拖动的当前搜索位置。这个注释只是一个普通的 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 上。

那么,我怎样才能让它在拖动之前、期间和之后保留它的图像?

【问题讨论】:

    标签: ios objective-c annotations mapkit ios7


    【解决方案1】:

    我也遇到了这个问题。 我设法通过将 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;
    }
    

    不同的是,拖放不会显示pin drop的动画。

    希望对某人有所帮助。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-07-06
      • 1970-01-01
      • 2013-10-12
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多