我在 MKMapView 上设置了多个注释。我不想在单击图钉时使用地图注释标注,而是希望将子视图 ( self.detailView
) 动画化到屏幕底部,并在未选择任何内容时将其移回。当用户选择了一个图钉,然后选择了另一个图钉时,我希望我的视图在屏幕外显示动画,然后立即在屏幕上显示动画(当然,与新选择的注释对应的不同信息)。
没有想太多,我尝试了似乎很容易做的事情 - 选择注释时,self.detailView
在屏幕上设置动画,当取消选择时,在屏幕外设置动画self.detailView
:
- (void)mapView:(MKMapView *)mapView didSelectAnnotationView:(MKAnnotationView *)view
{
NSLog( @"selected annotation view" );
[UIView animateWithDuration:0.2f
delay:0.0f
options:UIViewAnimationOptionCurveEaseInOut | UIViewAnimationOptionAllowUserInteraction
animations:^{
[self.detailView setFrame:CGRectMake(0, 307, 320, 60)];
}
completion:^(BOOL finished){
}];
}
- (void)mapView:(MKMapView *)mapView didDeselectAnnotationView:(MKAnnotationView *)view
{
NSLog( @"deselected annotation view" );
[UIView animateWithDuration:0.2f
delay:0.0f
options:UIViewAnimationOptionCurveEaseInOut | UIViewAnimationOptionAllowUserInteraction
animations:^{
[self.detailView setFrame:CGRectMake(0, 367, 320, 60)];
}
completion:^(BOOL finished){
}];
}
This works fine when no pin is selected and the user selects a pin, and when a pin is selected and the user deselects it by clicking on empty space. 当然,当一个 pin 已经被选中时,问题就出现了:如果用户随后点击另一个 pin,didDeselectAnnotationView
并didSelectAnnotationView
快速连续触发,两个动画会尝试同时运行,结果效果无法正常工作. 通常我会通过将第二个动画放在第一个动画的完成块中来将动画链接在一起,但由于它们是在单独的方法中,我显然不能在这里这样做。
有人对我如何解决这个问题有任何想法吗?谢谢!