2015-07-20 4 views
0

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

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

@IBAction func hasPhoneChanged(sender: UISegmentedControl) {//is called when user selects that "he have phone or not" 
     if sender.selectedSegmentIndex == 0 {//Yes 
      self.phoneInput.hidden = false 
      ... 
     }else{        //No 
      self.phoneInput.hidden = true 
      //move the next input up, to cover space  
      UIView.animateWithDuration(1, animations: {() -> Void in 
       self.emailInput.frame.origin.y = self.emailInput.frame.origin.y - 38; 
      }) 
     } 
    } 

Я делаю что-то неправильно? Любая подсказка, пожалуйста.

ответ

1

При использовании автоматического макета вместо анимированных ограничений макета. Пример:

UIView.animateWithDuration(1, animations: {() -> Void in 
self.emailTopVSpaceConstraint.constant = self.emailTopVSpaceConstraint.constant - 38; 
self.view.layoutIfNeeded() 
}) 
+0

Вы правы, я использовал автомат. И в этом была проблема. Теперь он остается на анимированной позиции. Но теперь он не оживляет, он просто появляется прямо там, где я хочу, чтобы он появился. Это то, что я использую сейчас. UIView.animateWithDuration (1, анимация: {() -> Пустота в self.emailTopVSpaceConstraint.constant = self.emailTopVSpaceConstraint.constant - 38 }) " – Patriks

+0

Вызов layoutIfNeeded в вашем блоке анимации, чтобы выполнить вычисления для позиции назначения. Отредактировал мой ответ. – Stefan

+0

Правильный ответ! Для знания, что было бы более эффективным способом: 1) анимировать по свойству (высота/ширина), а в 'завершении: 'установить ограничение или 2) анимировать по ограничению, как вы показали выше. – Patriks

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