2013-04-11 168 views
0

我有以下簡單的嵌套動畫代碼用於轉換,如附圖所示。自動佈局和嵌套動畫

[UIView animateWithDuration:2.0f animations:^{ 
    CGRect frame = self.label.frame; 
    frame.origin.y += 100; 
    self.label.frame = frame; 
} completion:^(BOOL finished) { 
    [UIView animateWithDuration:2.0f animations:^{ 
     self.button.transform = CGAffineTransformMakeRotation(M_PI); 
    }completion:^(BOOL finished) { 
     // 
    }]; 
}]; 

intended animation transition

視圖佈局在具有自動佈局XIB文件中定義。正如IB自動提出的,它對按鈕和標籤都有垂直限制。

在這種情況下,轉換不像附圖所示。它從State1到State2,但是簡要地回到State1,然後轉到State3。

我的想法是,這是由標籤的垂直約束引起的。當我以編程方式在動畫之前刪除約束時,動畫開始按預期工作。

[self.view removeConstraint:self.labelConstraint]; 

我想知道的是,如果這是正確的方式做到這一點。一些post表明,由於約束不足以確定佈局,刪除約束有時會導致不可預測的行爲。

回答

0

好的,我的朋友回答了我的問題,這對我來說完全有意義。

[UIView animateWithDuration:2.0f animations:^{ 
    CGRect frame = self.label.frame; 
    frame.origin.y += 100; 
    self.label.frame = frame; 
} completion:^(BOOL finished) { 

    //////////////////////////////////// 
    self.labelConstraint.constant += 100; 
    //////////////////////////////////// 

    [UIView animateWithDuration:2.0f animations:^{ 
     self.button.transform = CGAffineTransformMakeRotation(M_PI); 
    }completion:^(BOOL finished) { 
     // 
    }]; 
}]; 

請注意,我正在更改約束值以適應新的幀,在第二個動畫開始之前。這樣就會有足夠的自動佈局。

如果有人擁有它們,還在等待其他途徑!

+0

已經過了幾個星期了,所以我會接受我的回覆... – barley 2013-04-24 21:35:11