【问题标题】:Displaying MKAnnotation callout automatically自动显示 MKAnnotation 标注
【发布时间】:2010-08-20 13:50:29
【问题描述】:
为什么这不起作用?
- (void)mapView:(MKMapView *)mapView didAddAnnotationViews:(NSArray *)views {
if (TRACE_LOG) NSLog(@"%s", __FUNCTION__);
[mapView selectAnnotation:[views lastObject] animated:YES];
return;
}
谢谢,
Z@K!
【问题讨论】:
标签:
iphone
mkannotationview
【解决方案1】:
因为你必须选择注解对象,而不是它对应的视图。
我 100% 不确定,但我认为以下方法应该可行:
MKAnnotationView* annotationView = (MKAnnotationView*)[views lastObject];
[mapView selectAnnotation:annotationView.annotation animated:YES];
如果您将注释存储在某处,则直接从该存储中获取所需的注释对象可能会更好。请注意,只有当您尝试选择当前在屏幕上可见的注释时,所有这些方法才会生效。
【解决方案2】:
如果你只有一个注解,这是最简单的方法:
[mapView selectAnnotation:[mapView.annotations objectAtIndex:0] animated:true];
注意:如果您启用了图钉放置动画,则会将其禁用。基本上,它会在添加到地图视图后立即选择注释,从而切断动画。
如果您想在选择它之前等待大头针放置动画完成,这里有一个半hacky 的方法来实现它。首先,确保您的视图控制器设置为 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];
}