Swift: анимированный UIView движется к источнику, а не от него - PullRequest
0 голосов
/ 26 мая 2018

Я серьезно осмотрелся здесь, но не нашел что-то, что отвечало бы на мой вопрос, поэтому, если вы нашли правильное решение, пожалуйста, скажите мне.

Итак: я написал небольшое приложение на Xcode, в котором дваметки должны переместиться от текущей позиции к другой позиции на 350 пунктов выше.Я анимировал их так:

UIView.animate(withDuration: 2.0 , animations: {            
    self.label1.center.y += CGFloat(-350)
    self.label2.center.y += CGFloat(-350)
})

На самом деле произошло то, что, как только эта линия была нажата, лейблы спрыгнули на 350 пунктов вниз, а затем переместили 350 пунктов к своему источнику.Когда я изменил значение CGFloat на +350, метки подскочили на 350 пунктов, а затем снова вернулись к источнику.Так что, похоже, вместо запуска анимации из источника, Xcode попытался заставить анимацию перейти к источнику.Я, честно говоря, понятия не имею, почему, поскольку вся документация об анимации предполагает иное.

Кстати, я также посмотрел, было ли у меня ограничение на y-размещение меток, но их не было.

Ответы [ 2 ]

0 голосов
/ 27 мая 2018

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

self.label2.transform = CGAffineTransform(scaleX: 0, y: 350)

Это фактически оживитслой, а не фактический кадр вида.

0 голосов
/ 26 мая 2018

Сначала попробуйте:

self.label1.center.y += CGFloat(-350)
self.label2.center.y += CGFloat(-350)

Затем:

UIView.animate(withDuration: 2.0 , animations: {
    layoutIfNeeded()
}

Примечание: Если вы используете ограничения для этикеток, вы должны изменить позиции своих этикеток, изменивих ограничения вместо добавления CGFloat к нему.Тогда попробуйте:

UIView.animate(withDuration: 2.0 , animations: {
    layoutIfNeeded()
}
...