2014-09-25 4 views
0

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

enter image description here

Я сделал это анимацией кадра и, конечно, когда я нажимаю на текстовом поле, вид применяется оригинальное ограничение на «My Title» ярлык и толкает его обратно в исходном центре города.

enter image description here

Как я могу удалить центрирующую ограничение и добавить новое ограничение в-принудительно пространство от верхней программно?

Вот мой код анимации:

[UIView animateWithDuration: 0.8 
         delay: 1.0 
    usingSpringWithDamping: 0.8 
     initialSpringVelocity: 0.5 
        options: UIViewAnimationOptionCurveEaseOut 
       animations: ^{ 
        self.titleLabel.frame = CGRectOffset(self.titleLabel.frame, 0, -self.view.frame.size.height/4.5); 
       } completion: ^(BOOL finished) { 
        if (finished) 
        { 
         [UIView animateWithDuration: 0.8 
               delay: 0.3 
           usingSpringWithDamping: 0.8 
           initialSpringVelocity: 0.5 
              options: UIViewAnimationOptionCurveEaseInOut 
              animations: ^{ 

               self.userIdTextField.alpha = 1.0; 
               self.userPasswordTextField.alpha = 1.0; 
               self.loginButton.alpha = 1.0; 

              } completion: ^(BOOL finished) { 
              }]; 
        } 
       }]; 

ответ

5

Это намного проще, чем вы думаете. Вы можете создавать IBOutlets для ограничений и изменять их постоянные значения вместо удаления и повторного добавления.

С вашей раскадровки перетащите свое ограничение в исходный код вашего контроллера. Это даст вам возможность создать IBOutlet, указывающий на ограничение.

Тогда все, что вам нужно сделать в анимации UIView, это изменение значения ваших ограничений. постоянное значение.

Ниже приведен пример розетки Авто-макета ограничения:

@property (weak, nonatomic) IBOutlet NSLayoutConstraint *myViewHeight; 

Ниже приведен пример анимации кода, изменить высоту зрения путем изменения ограничения константы:

[UIView animateWithDuration:0.5 
        delay: 0.0 
       options: UIViewAnimationOptionTransitionNone 
      animations:^{ 
        _myViewHeight.constant += 20.0f; 
        [self.view layoutIfNeeded]; 
       } 
      completion:nil]; 

Это может быть не совсем то, что вы хотите сделать, но вы должны иметь возможность изменять свои ограничения таким образом, чтобы выполнить работу.

0

Если бы структурировать мои сдерживает разные. Вместо ограничения центра я ограничил его расстоянием от центра Y, сделал IBOutlet для этого ограничения, а затем оживил это.

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