Перестала работать анимация изображения через layoutIfNeeded

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

К сожалению, у меня нет никаких версий Git. Я немного новичок, и по крайней мере этот опыт подумал о ценности git, и я буду использовать его впредь. Я добавил ограничения в раскадровку, четыре из которых - те, на которые я пытаюсь воздействовать через код. Это ограничение y и x для двух изображений, которые я пытаюсь переместить.

Дополнительная информация У меня есть четыре предупреждения: "Ограничение ссылок на элементы отключено в текущей конфигурации. Отключите это ограничение в текущей конфигурации. Я смог сделать вывод, что ограничения, дающие предупреждения, - это четыре ограничения, которые я пытаюсь оживить. Но я все еще не уверен, как это исправить.

Дополнительное обновление, которое я переместил в анимационный код override func viewWillAppear(animated: Bool) { super.viewWillAppear(true), После этого я вижу анимацию, если удаляю первую self.view.layoutIfNeeded() Однако это оживляет все взгляды. Но я не могу получить только изменения ограничения для анимации.

override func viewDidLoad() {
    super.viewDidLoad()
    // Do any additional setup after loading the view, typically from a nib.

...

    self.view.layoutIfNeeded()
    self.firstCallyC?.constant = 0

    UIView.animateWithDuration(1.3, delay: 0.3, options: .CurveEaseInOut, animations: {
        self.firstCallyC!.constant = (usePoint[0].y) - 210
        self.firstCallxC?.constant = (usePoint[0].x) - 300
        self.meditateyC?.constant = (usePoint[179].y) - 210
        self.meditatexC?.constant = (usePoint[179].x) - 300
        self.view.layoutIfNeeded()
        }, completion: nil)
}

2 ответа

Решение

Я наконец нашел решение, добавив override func viewDidAppear к классу, а затем добавить анимацию к этой функции. Я думаю, что все изображения должны быть правильно загружены и размещены, прежде чем они могут быть анимированы или что-то в этом роде?

Вы должны ограничить константы вне блока анимации

  firstCallyC!.constant = (usePoint[0].y) - 210
  firstCallxC?.constant = (usePoint[0].x) - 300
  meditateyC?.constant = (usePoint[179].y) - 210
  meditatexC?.constant = (usePoint[179].x) - 300
  UIView.animateWithDuration(1.3, delay: 0.3, options: .CurveEaseInOut, animations: {

      self.view.layoutIfNeeded()
 }, completion: nil)
Другие вопросы по тегам