我通过NSLayout约束以编程方式定义了一个复杂的布局。现在我发现自己处于一种需要为其中一个元素制作动画的情况。
我需要动画视图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]];
答案 0 :(得分:0)
当然,你可以做到。从你的约束中判断出来的位置有点难,但是,例如,如果你改变了crossFadeView的高度,clipGrid会自动收缩,因为它没有明确的高度设置,而轨道视图将保持其高度,因为它确实有一个定义的高度。 screenLaunchView,tempoControl和meter也会因同样的原因自动缩小。
要更改crossFadeView的高度,您必须为其创建高度约束,然后更改该约束的常量值。我通常在动画块上方执行此操作,然后在动画块中的superview上调用layoutSubviews。