0
我正在通過NSLayout約束,以編程方式定義複雜的佈局。現在我發現自己處於需要製作其中一個元素的情況。如何以編程方式更改和動畫化NSLayoutConstraints?
我需要動畫視圖crossFadeControlView改變它的高度。這顯然意味着另一個需要動態縮小。那可能嗎?
如果不是......我的選擇是什麼?
下面是我的約束:
[self addConstraints:[NSLayoutConstraint constraintsWithVisualFormat:@"|[clipGrid] [sceneLaunchView(==117)][meter(==9)][tempoControl(==58)]|" options:0 metrics:nil views:views]];
[self addConstraints:[NSLayoutConstraint constraintsWithVisualFormat:@"|[tracksView][meter(==9)][tempoControl(==58)]|" options:0 metrics:nil views:views]];
[self addConstraints:[NSLayoutConstraint constraintsWithVisualFormat:@"|[crossFadeControlView]|" options:0 metrics:nil views:views]];
[self addConstraints:[NSLayoutConstraint constraintsWithVisualFormat:@"V:|[clipGrid]-3-[tracksView(==143)][crossFadeControlView]|" options:0 metrics:nil views:views]];
[self addConstraints:[NSLayoutConstraint constraintsWithVisualFormat:@"V:|[sceneLaunchView]-3-[tracksView][crossFadeControlView]|" options:0 metrics:nil views:views]];
[self addConstraints:[NSLayoutConstraint constraintsWithVisualFormat:@"V:|[tempoControl][crossFadeControlView]|" options:0 metrics:nil views:views]];
[self addConstraints:[NSLayoutConstraint constraintsWithVisualFormat:@"V:|[meter][crossFadeControlView]|" options:0 metrics:nil views:views]];
Thx爲答覆。我如何創建這樣的約束?我應該從已經定義的約束中獲得它嗎?或者我應該創建一個新的約束?如果是這樣,那我怎麼樣?我仍然沒有發現任何讓我朝這個方向發展的東西。 Thx – 2013-03-03 17:06:47
再次。我能夠創建以下約束:[NSLayoutConstraint constraintWithItem:crossFadeControlView屬性:NSLayoutAttributeHeight relatedBy:NSLayoutRelationLessThanOrEqual toItem:tracksView屬性:NSLayoutAttributeHeight乘數:0.5常量:0];我不能讓它有一個0高度。但它已經是動畫了! :) – 2013-03-03 17:39:02
@NunoSantos,好吧,你永遠不會得到它0如果你說它是一半的trackView有一個高度爲143的trackView。如果你不需要它與其他任何東西有關,最簡單的方法是在IB中創建一個高度約束的出口,然後在代碼中改變常量值。 – rdelmar 2013-03-03 22:51:10