我從來沒有與自動佈局約束之前。我正在創建一個小型的新應用,並注意到NIB的視圖默認爲自動佈局。所以,我想我會藉此機會與它,並試圖找出蘋果去哪裏與此。iOS:如何動畫到新的自動佈局約束(高度)
第一個挑戰:
我需要調整的的MKMapView,我想它動畫到新的位置。如果我這樣做的方式,我已經習慣了:
[UIView animateWithDuration:1.2f
animations:^{
CGRect theFrame = worldView.frame;
CGRect newFrame = CGRectMake(theFrame.origin.x, theFrame.origin.y, theFrame.size.width, theFrame.size.height - 170);
worldView.frame = newFrame;
}];
...那麼的MKMapView將「捕捉」恢復到原來的高度,只要兄弟姐妹視圖被更新(在我的情況下,一個UISegmentedControl的標題被更新[myUISegmentedControl setTitle:newTitle forSegmentAtIndex:0]
)。
所以,我想我想要做的是從等於父視圖的HIGHT到可相對於UISegmentedControl頂部改變的MKMapView的限制,這爲覆蓋:V:[MKMapView]-(16)-[UISegmentedControl]
我想要的是MKMapView高度縮短,以便顯示地圖視圖下的一些控件。要做到這一點我認爲我需要將約束從固定的全尺寸視圖更改爲底部約束到UISegmentedControl的頂部...我希望它動畫視圖縮小到新的大小。
這是怎麼回事?
編輯 - 這個動畫是不動畫雖然視圖的底部不會馬上拉昇170:
[UIView animateWithDuration:1.2f
animations:^{
self.nibMapViewConstraint.constant = -170;
}];
和nibMapViewConstraint
連線了在IB的底部垂直空間約束。
我知道,你可以很容易地改變一個[UIView的animateWithDuration約束的恆定值containerView的高度約束。 。]塊來爲高度變化設置動畫。您需要爲該約束創建一個IBOutlet並將其掛接到xib中,否則,如果您使用代碼創建它(或通過所有約束來查找它),請保留對其的引用。不知道如何動畫relatedBy的變化,但我讀過,你應該只改變常量而不是其他值的約束(對於其他值,創建一個新的約束)。 – yuf
嗯。我以爲我可以但我不是動畫。它改變,成功,並在動畫塊,但* *不*動畫!?! – Meltemi
發現我的答案在這裏: –
Meltemi