objective-c - MKAnnotationView 缩放时不会保持在原位

标签 objective-c ios mapkit mkannotationview

我正在 iOS 中的 map 上放置自定义标记,但遇到了一个问题,即当用户捏合放大和缩小时,标记不会锚定到应有的位置。这是添加标记的代码...

- (MKAnnotationView *)mapView:(MKMapView *)mapView viewForAnnotation:(id <MKAnnotation>)annotation {
    if ([annotation isKindOfClass:[MKUserLocation class]])
        return nil;

    MarkerVO *thisMarker = (MarkerVO*)annotation;

    MKAnnotationView *pin = (MKAnnotationView *) [map dequeueReusableAnnotationViewWithIdentifier:[thisMarker commaSeparatedCoordinate]];
    if (!pin) {
        pin = [[[MKAnnotationView alloc] initWithAnnotation:annotation reuseIdentifier:[thisMarker commaSeparatedCoordinate]] autorelease];
        [pin setImage:[UIImage imageNamed:@"pin_tick.png"]];
        [pin setCenterOffset:CGPointMake(0, -23)];
        [pin setCanShowCallout:YES];
    }
    return pin;
}

所以,是的,刻度线显示正常,但在缩放时,它只是四处移动。例如,在近距离变焦时,它可能就在现场,但在远距离变焦时,它最终会出现在海里!我明白为什么会发生这种情况,但是即使没有 setCenterOffset 线,它仍然会发生。

任何想法都会很棒。

最佳答案

当 pin 未从出队返回 nil 时,尝试将 pin.annotation 设置为注释。

重用的 View 可能以某种方式来自不同的注释,即使代码似乎为每个注释设置了唯一的标识符(我在任何情况下都不推荐这样做)。

关于objective-c - MKAnnotationView 缩放时不会保持在原位,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6168753/

相关文章:

ios - NSPredicate 搜索 LIKE

ios - MDM 配置文件无法安装

ios - 容器 View 在 View 上不可见,但在 TableView 内

ios - 在 SceneKit 中使用 MapKit

iphone - 设置 map View 中心坐标后,自定义注释 View 将从其 super View 中删除

ios - 如何将 NSOperationQueue 与 NSURLSession 一起使用?

ios - 为什么当我的动画所在的 View 是从模态转场中调用时,我的动画都不播放?

android - Flutter - 为 API 实现 JSON getter

ios - iOS 6 MapKit 是否适用于早期版本的 iOS?

objective-c - 使用 ARC 时访问综合属性