didSelect执行不等待didDeSelect动画结束

时间:2017-01-08 12:06:21

标签: ios swift animation mapkit

我有一张包含多个地图图钉的地图。单击时,每个引脚将显示一个视图,其中包含特定于所选引脚的信息。所以让我们说一下关于pin的位置信息。

想象一下以下用例:

1-选择引脚时,使用有关所选引脚的信息为视图显示设置动画。

2-选择其他引脚时,为隐藏在步骤1中选择的视图设置动画。

3-步骤2中的动画完成后,使用有关新选择的图钉的特定信息为视图显示设置动画。

我已经实现了以下mapKit函数

func mapView(_ mapView: MKMapView, didDeselect view: MKAnnotationView) {

        UIView.animate(withDuration: 0.5, animations: {

            // Animate views

        })

}

func mapView(_ mapView: MKMapView, didSelect view: MKAnnotationView){
     // did select code

     UIView.animate(withDuration: 0.5, animations: {

          // Animate views

     })
}

一旦我尝试执行第2步的操作,就会执行didDeselct函数。然后,执行didSelect函数中的逻辑。这有效,但有一个问题。在执行didSelect函数之前,didDeselect中动画的执行没有完成。

如果didDeselct中的动画完成,我怎样才能阻止didSelect的执行。

请记住,我仍然需要didSelect函数,因此我无法在animate代码中放置此函数的逻辑。

1 个答案:

答案 0 :(得分:2)

我建议您编写一个功能来显示和隐藏相关的view。需要此功能来处理这两个过程。您还可以创建一个Bool变量来了解是否有任何动画正在进行中。如果是,则等待它完成并在完成后再次触发该功能。您可以使用变量的getset块或Observer Pattern。我希望这会有所帮助。