2017-01-08 4 views
0

У меня есть карта с несколькими контактами карты. На каждом выводе, при нажатии, отображается представление с информацией, специфичной для выбранного булавки. Так что скажем, информация о местоположении.сделалSelect исполнение не до конца сделалDeSelect анимация до конца

Представьте следующий случай использования:

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. Это работает, но есть одна проблема. Выполнение анимации в didDeselect не заканчивается до выполнения функции didSelect.

Как заблокировать выполнение didSelect до тех пор, пока анимация в файле didDeselct не будет завершена.

Имейте в виду, что мне все еще нужна функция didSelect, поэтому я не могу поместить логику этой функции внутри кода анимации.

ответ

2

Предлагаю вам написать функцию для отображения и скрытия связанных view. Эта функция должна будет заботиться обо всех этих процессах. Также вы можете создать переменную Bool, чтобы узнать, продолжается ли какая-либо анимация. Если это так, то подождите, пока это произойдет, и снова запустите функцию, когда это будет сделано. Вы можете использовать get, set блоки переменной или Observer Pattern. Я надеюсь, это поможет.

+0

Спасибо, это то, о чем я думал, но я думал, что есть способ сделать это, что было встроено в рамки. Я попробую это. –

+0

Возможно, есть способ, который встроен в фреймворк, но я не человек, у которого такой быстрый опыт. Попробуйте, если это сработает, никаких проблем; Если нет, сообщите мне. – Faruk

+0

Спасибо, хорошо работает –

Смежные вопросы