设置约束动画UIView的初始高度

时间:2015-07-02 00:23:40

标签: ios uiview uiviewanimation nslayoutconstraint

我希望将视图(屏幕截图中的绿色视图)设置为从底部到顶部布局指南附近定义的高度。我的计划是为垂直距离约束设置动画(绿色框的顶部到顶部布局指南),如下所示:

enter image description here enter image description here

以下是代码:

- (IBAction)upButton:(UIButton *)sender
{
    self.animatedHeightConstraint.constant = 20;
    [UIView animateWithDuration:0.5
                     animations:^{
                         [self.view layoutIfNeeded];
                     } completion:nil];
}

很好,这很有效。

然而,这个方案并没有考虑到视图的起始高度,我希望它非常小,可能为零。但是,由于此时我依靠故事板中设置的常量来设置起始高度,因此常量可以是任意数字,具体取决于设备。

我需要一个积极的方法来设置绿色UIView顶部的初始设备无关起点。

我的第一个想法是设置一个高度约束,但编译器检测到冲突,并通过打破约束进行纠正。

我的第二个想法,虽然看起来很笨拙,但是设置两个约束,然后在运行时删除Vertical约束,然后立即删除Height约束并添加回Vertical约束。

我错过了一些明显的东西,还是没有更优雅的方式来解决这个问题?

更新

由于我还没有收到答案,我尝试实施我的第二个想法,详见上文。我通过以下代码在绿色栏中添加了initialHeightConstraint

-(void)viewWillAppear:(BOOL)animated
{
    [self.view removeConstraint:self.animatedHeightConstraint];
    [self.greenBar addConstraint:self.initialHeightConstraint];

    self.initialHeightConstraint.constant = 1;
    [self.view setNeedsLayout];

}

这很有效。 greenBar设置为所需的高度,与Soryboard中的constant不同:

enter image description here

接下来,我尝试换出两个约束并为animatedHeightConstraint

设置动画
- (IBAction)upButton:(UIButton *)sender
{
    [self.greenBar removeConstraint:self.initialHeightConstraint];
    [self.view addConstraint:self.animatedHeightConstraint];

    [self.view setNeedsLayout];


    self.animatedHeightConstraint.constant = 20;

    [UIView animateWithDuration:0.5
                     animations:^{
                         [self.view layoutIfNeeded];
                     } completion:nil];
}

这不起作用。崩溃:

Terminating app due to uncaught exception 'NSInternalInconsistencyException', reason: 'Invalid parameter not satisfying: [constraint isKindOfClass:[NSLayoutConstraint class]]'

不幸的是,我不明白这意味着什么。可以使用一些帮助!

0 个答案:

没有答案