2016-07-29 50 views
1

我試圖在需要改變視圖固有尺寸的UIView子類中編排一些動畫。在改變固有尺寸的同時改變NSLayoutConstraint的動畫效果問題

CATransaction完成塊中,我呼叫invalidateIntrinsicContentSize()來反映大小的變化,並在我製作動畫約束後立即執行。

self.layoutIfNeeded() 
UIView.animateWithDuration(2) { 
    NSLayoutConstraint.deactivateConstraints(oldConstraints) 
    NSLayoutConstraint.activateConstraints(newConstraints) 
    self.layoutIfNeeded() 
} 

但奇怪的事情發生了,與提供給deactivateConstraintsactivateConstraints方法的限制一起,我也看到沿着相同的時間進行動畫視圖的大小。

下面是一個在行動中的視頻。

https://www.youtube.com/watch?v=OgM378Wryd0

這裏的問題的示意圖。

enter image description here

我的目的是立即改變視圖的大小,並與定位約束沿不製作動畫。

+0

爲什麼你使用animateWithDuration方法,如果你的意圖是不動畫? –

+0

我的意圖是動畫位置,而不是大小。 –

回答

1

結束工作的一個解決方案是將最初的layoutIfNeeded()調用包裝在動畫塊中,然後在完成時啓動位置動畫。

UIView.animateWithDuration(2, animations: { self.layoutIfNeeded() }) { 
    UIView.animateWithDuration(2) { 
    NSLayoutConstraint.deactivateConstraints(oldConstraints) 
    NSLayoutConstraint.activateConstraints(newConstraints) 
    self.layoutIfNeeded() 
    } 
} 

它並不十分好看,因爲我不是沒有實際動畫大小的變化,我希望他們能立即發生。所以我仍然在尋找一個優雅的解決方案,或者說爲什麼不能有一個解決方案。