0

プログラムで NSLayout 制約を介して複雑なレイアウトを定義しています。今、要素の 1 つをアニメーション化する必要がある状況に陥っています。

ビュー 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 に答える