2015-06-21 1 views
0

Я пытаюсь анимировать UIButton, чтобы сжиматься и перемещаться в центр представления. Эта анимация чередуется между запуском правильно и нет. Когда он работает неправильно, он игнорирует вызов, отправляющий UIButton в центр, и только уменьшает представление на месте.Swift UIView.animateWithDuration игнорирует код анимации время от времени

код анимации:

println("before send box center \(self.box1.center) to middle \(self.view.center)") 

UIView.animateWithDuration(0.5, delay: 0.0, options: UIViewAnimationOptions.CurveEaseInOut, animations: { 
    println("1 send box center \(self.box1.center) to middle \(self.view.center)") 

    self.box1.center = self.view.center     
    self.box1.transform = CGAffineTransformMakeScale(0.0001, 0.0001) 

    println("2 send box center \(self.box1.center) to middle \(self.view.center)") 
}, completion: { finished in 
    println("final box center \(self.box1.center) to middle \(self.view.center)") 
}) 

Когда анимация работает правильно, первые два printlns показывают центр бокса CGPoint перед анимацией, а последние два printlns показывают центр вида по CGPoint, который теперь также короб Центральная точка.

Когда анимация запутывается, первые два printlns показывают центр CGPoint окна перед анимацией, третий println (внутри блока анимации) показывает, что центр окна был установлен в центр представления, НО, когда мы добираемся до println в блоке завершения, поле вернулось к исходной центральной точке (и анимация делает то же самое, сжимает ящик на месте, не перемещая его в центр)

Что может привести к тому, что этот же код анимации перевернется между его кодом и без его кода?

Что может привести к тому, что код в блоке анимации, который устанавливает центральную точку окна, не учитывается к моменту поступления в блок завершения?

Нет другого кода, который оживляет или меняет рамку или местоположение окна, которое я пытаюсь оживить.

Я попытался добавить UIViewAnimationOptions.OverrideInheritedCurve и. AllowAnimatedContent и .BeginFromCurrentState и .AllowUserInteraction в надежде найти сбой, вызывающий проблему, но ни один из них не имеет никакого отношения к тому, как выполняется код или как показывает анимация.

ответ

0

Уверен, что у вас есть «Использовать AutoLayout», зарегистрированный в вашей раскадровке/XIB. Вы должны делать анимацию по-разному, когда используете AutoLayout. Вместо изменения рамки или центра представления вы должны добавить ограничения для этих настроек и подключить IBOutlets к этим ограничениям.

Затем в коде анимации измените постоянное значение ограничения (-ов). а затем позвоните layoutIfNeeded() по телефону self.view.

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