2014-09-25 32 views
0

在iOS開發中,我一直在閱讀一些關於動畫製作xibs的文章。大多數情況下,我讀的是不使框架動畫,而是使約束動畫化。我已經將標籤限制在啓動視圖的中心位置,然後將其設置爲動畫並顯示登錄文本字段(您看到的典型登錄內容)。iOS xibs的動畫制約因素

enter image description here

我做這個動畫框架,當然,當我點擊文本字段,視圖適用原始約束到「我的標題」的標籤,並將其推回原來的中心位置。

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

它比你想象的要容易得多。您可以爲約束創建IBOutlet並更改它們的常量值,而不是刪除和重新添加。

從您的Storyboard中,控制 - 將您的約束拖動到您的視圖控制器的源代碼中。這會讓您選擇創建指向約束的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設置爲該約束,然後對其進行動畫處理。