自动显示MKAnnotation的弹出窗口

4
为什么这个不起作用?
- (void)mapView:(MKMapView *)mapView didAddAnnotationViews:(NSArray *)views {
    if (TRACE_LOG) NSLog(@"%s", __FUNCTION__);

    [mapView selectAnnotation:[views lastObject] animated:YES];

    return;
}

感谢您,Z@K!
2个回答

7
因为您必须选择注释对象,而不是与之对应的视图。
我不确定,但是我认为以下内容应该有效:
MKAnnotationView* annotationView = (MKAnnotationView*)[views lastObject];
[mapView selectAnnotation:annotationView.annotation animated:YES];

如果你将注释存储在某个地方,最好直接从该存储中获取所需的注释对象。请注意,只有在尝试选择当前屏幕上可见的注释时,所有这些方法才会产生影响。

有没有一种简单的方法来显示多个注释? - user1872384

2
如果您只有一个注释,这是最简单的方法:
[mapView selectAnnotation:[mapView.annotations objectAtIndex:0] animated:true];

注意:如果您启用了标记针掉落动画,则会禁用它。基本上,它在将注释添加到地图视图时立即选择注释,因此会切断动画。
如果您想要在选择之前等待针掉落动画完成,这里有一种半妥协的方法可以实现。首先,请确保您的视图控制器设置为MKMapViewDelegate,然后:
- (void)mapView:(MKMapView *)mapView didAddAnnotationViews:(NSArray *)views {
    NSTimer *timer = [NSTimer scheduledTimerWithTimeInterval:.7 target:self selector:@selector(pinDropped) userInfo:nil repeats:NO];

}

- (void) pinDropped {
    [mapView selectAnnotation:[mapView.annotations objectAtIndex:0] animated:true];
}

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接