Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/ios/111.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ios 如何以编程方式更改NSLayoutConstraints并设置其动画?_Ios_Core Animation_Nslayoutconstraint - Fatal编程技术网

Ios 如何以编程方式更改NSLayoutConstraints并设置其动画?

Ios 如何以编程方式更改NSLayoutConstraints并设置其动画?,ios,core-animation,nslayoutconstraint,Ios,Core Animation,Nslayoutconstraint,我通过NSLayout约束以编程方式定义了一个复杂的布局。现在我发现自己处于一种需要为其中一个元素设置动画的情况下 我需要设置视图CrossFadeControl视图的动画,以更改其高度。这显然意味着另一个需要动态收缩。可能吗 如果不是。。。我有什么选择 以下是我的限制: [self addConstraints:[NSLayoutConstraint constraintsWithVisualFormat:@"|[clipGrid] [sceneLaunchView(==117)

我通过NSLayout约束以编程方式定义了一个复杂的布局。现在我发现自己处于一种需要为其中一个元素设置动画的情况下

我需要设置视图CrossFadeControl视图的动画,以更改其高度。这显然意味着另一个需要动态收缩。可能吗

如果不是。。。我有什么选择

以下是我的限制:

    [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]];

当然,你能做到。从约束中分辨出什么位置有点困难,但例如,如果更改crossFadeView的高度,clipGrid将自动收缩,因为它没有明确的高度设置,而“轨迹视图”将保持其高度,因为它有定义的高度。screenLaunchView、tempoControl和meter也会出于同样的原因自动收缩


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

Thx以获取回复。如何创建这样的约束?我应该从已经定义的约束中获取它吗?或者我应该创建一个新的约束?如果是的话,我想知道这是怎么做的?我仍然没有找到任何能指引我走向那个方向的东西。又是ThxHi。我能够创建以下约束:[NSLayoutConstraint constraintWithItem:CrossFadeControl视图属性:NSLayoutAttributeHeight relatedBy:NSLayoutRelationLessThanOrEqual-toItem:tracksView属性:NSLayoutAttributeHeight乘数:0.5常量:0];我就是不能让它有一个0的高度。但它已经开始动画片了!:)@NunoSantos,如果你说它是tracksView的一半,它的高度是143,那么你永远不会得到0。如果您不需要它与任何其他内容相关,最简单的方法是在IB中创建一个高度约束的出口,然后在代码中更改常量值。