2016-03-06 73 views
4

UIStackView使用UIView的隱藏屬性很容易創建一個很好的動畫。我有兩個UIStackViews,每個UILabelsarrangedSubviews中,當我將一個新的UILabel添加到UIStackView時,它應該顯示一個標籤出現在正確索引處的動畫,並將標籤推到其上下。在UIStackView中動畫UILabels上的隱藏屬性會導致不同的動畫

這種效果是非常容易使用UIStackViews做到:

descriptionLabel.hidden = true 

let count = descriptionStack.arrangedSubviews.count 
descriptionStack.insertArrangedSubview(expenseLabel.descriptionLabel, atIndex: count - 1) 

UIView.animateWithDuration(0.5) { 
    descriptionLabel.hidden = false 
} 

我要爲兩個不同的UIStackViews同時做到這樣的效果,但是這會導致一些怪異的行爲,其中一個是正確的動畫,而在另一滴從視圖的頂部。 假設上述代碼可以被重複用於其他一些視圖和創建相同的動畫:

descriptionLabel.hidden = true 
costLabel.hidden = true 

let count = descriptionStack.arrangedSubviews.count 
descriptionStack.insertArrangedSubview(expenseLabel.descriptionLabel, atIndex: count - 1) 
costStack.insertArrangedSubview(expenseLabel.costLabel, atIndex: count - 1) 

UIView.animateWithDuration(0.5) { 
    descriptionLabel.hidden = false 
    UIView.animateWithDuration(0.5) { 
    costLabel.hidden = false 
    } 
} 

在這個例子中,costLabel正確動畫,而descriptionLabelUIStackView的頂部下降英寸反轉訂單會導致costLabel進入並且descriptionLabel正確地進行動畫。

我試過這個動畫代碼的變體,例如不嵌套動畫並使用UIView.animateKeyframesWithDuration

下面做,導致costLabel砸在和descriptionLabel正確動畫:

UIView.animateWithDuration(0.5) { 
    descriptionLabel.hidden = false 
} 

UIView.animateWithDuration(0.5) { 
    costLabel.hidden = false 
} 

我想不通爲什麼動畫總是彼此不同。如何同時爲兩個標籤設置動畫效果並使其顯示在正確的索引位置,並將標籤上下推?

回答

4

我有完全相同的問題。我發現設置UILabelContent Mode屬性似乎改變了UIView動畫的執行方式。在我的情況下,我想實現從上到下的動畫。默認動畫是從左側滑入並重新調整大小。設置內容模式爲Top爲我工作。

也許沒有什麼幫助。

+0

改變'Content Mode'對'UILabel'的動畫方式有明顯的影響,但看起來並不一致。將它設置爲'.Left'會使標籤「下拉」,但將其設置爲'.Right'使其顯示在視圖的左側。 從側面看,它至少看起來更好看,謝謝! – Casse