2016-12-26 2 views
0

Здесь у меня есть код для отображения UIView с меткой в ​​качестве уведомления.Могу ли я заставить элемент немедленно завершить анимацию?

self.not1cons.constant = 0 
self.notificationLbl1.text = self.notification1 

UIView.animate(withDuration: 2.5, delay: 0.3, options: .allowAnimatedContent, animations: { 

self.view.layoutIfNeeded() 

     }, completion: { finsihed in 

      self.not1cons.constant = -100 

      UIView.animate(withDuration: 2.5, delay: 2.0, options: .allowAnimatedContent, animations: { 

       self.view.layoutIfNeeded() 

     }, completion: { finshed in 

      }) 
     }) 

Это начало за кадром и спускается на улицу. Он остается на месте в течение нескольких секунд и возвращается в исходное положение за кадром. Мне нужен код, чтобы эти прикованные анимации происходили мгновенно. Это возможно?

+0

Вы добавляете 'delay'' 2.0', а затем жалуетесь, что есть задержка? – matt

+0

Что именно вы подразумеваете под «случаем мгновенно»? Знаете ли вы заранее, что хотите, чтобы анимация закончилась немедленно или вы хотите отменить анимацию в середине анимации? – nathan

+0

Это неясно, если я понял, я согласен с примечанием @matt, почему вы добавляете задержку для второй анимации? –

ответ

0

Возможно, вы справитесь с этим, манипулируя CAAnimations, которую система создает за кулисами, но это довольно сложный бизнес, а не отличная идея, поскольку он полагается на недокументированные детали текущей реализации, что является рискованным.

Вместо этого я предлагаю переделать ваши анимации, чтобы использовать UIViewPropertyAnimator для создания нового и для iOS 10 UIViewPropertyAnimator, который поддерживает приостановку и возобновление анимаций, а также очищает их взад и вперед в произвольные моменты.

У меня есть демонстрационный проект на Gitub под названием UIViewPropertyAnimator-test, который позволяет вам скрасить анимацию взад и вперед с помощью слайдера. Это сложнее, чем ваша потребность, но она должна дать вам эту идею.

+0

Спасибо за классную библиотеку, но я просто использовал функцию, чтобы вместо этого установить opacity в 0. –