2016-03-15 3 views
1

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

К сожалению, у меня нет версий 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) 
} 
+0

Пожалуйста, отредактируйте свой код, чтобы включить только самое подходящее - никто не хочет читать весь ваш класс для его отладки. Кроме того, есть ли у вас версии 'git', которые могут помочь вам найти причину изменения? И устанавливаете ли вы какие-либо ограничения в раскадровке или что-то там меняете? – sschale

+0

Спасибо за ваш комментарий, я отредактировал мой запрос. Спросите больше, если вы можете придумать дополнительную информацию, которая была бы полезной. –

+0

просто назовите self.view.layoutIfNeeded() в блоке анимации – Steve

ответ

0

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

0

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

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) 
+0

Спасибо за предложение. Я уже пробовал это, и к сожалению, это не помогает. @Coyote Мне кажется, что макет уже был обновлен, и поэтому анимация не может произойти. Я протестировал его, удалив оба self.view.layoutIfNeeded(), и изображения все равно появлялись на их обновленных позициях. Это странно, не так ли? –

+0

yes it's.but Я считаю, что рекомендуемый способ анимировать представление с ограничением - это изменить ограничение, а затем обновить макет с помощью 'layouIfNeeded()'. Вы можете попробовать преобразовать вид, это может помочь https://developer.apple.com/library/ios/documentation/GraphicsImaging/Reference/CGAffineTransform/ – Coyote

+0

Да, макет. Если вам нужно было отлично работать, как только я понял это правильно. Наконец, я нашел решение, переместив код в 'viewDidAppear' вместо' viewDidload'. –

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