0

我正在以编程方式通过 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]];
4

1 回答 1

0

当然,你可以这样做。很难从你的约束中分辨出什么在哪里,但是例如,如果你改变 crossFadeView 的高度,clipGrid 将自动缩小,因为它没有明确的高度设置,而轨道视图将保持它的高度,因为它确实有一个定义的高度. screenLaunchView、tempoControl 和 Meter 也会出于同样的原因自动缩小。

要更改 crossFadeView 的高度,您必须为其创建高度约束,然后更改该约束的常量值。我通常在我的动画块上方执行此操作,然后在动画块的超级视图上调用 layoutSubviews。

于 2013-03-03T16:20:35.247 回答