使用Autolayout查看不动画

Dre*_*rew 3 uiview uiviewanimation ios autolayout

我一直在寻找SO并找到了一些相关的帖子,但没有一个(还)解决了我的问题.

我的故事板中有一个视图设置,通过IBOulet连接约束.在某个动作后,视图应向上移动(或向下移动到其初始位置).对于我的生活,我无法让它正常工作.在autolayout之前,我运行了这段代码:

- (void)animateStarBackground:(NSString *)animationID
                 finished:(NSNumber *)finished
                  context:(void *)context
                   myView:(UIView *)myView
                     xPos:(float)xPos
                     yPos:(float)yPos {

    [UIView beginAnimations:nil context:nil];
    [UIView setAnimationDuration:0.2];
    [UIView setAnimationDelay:0.5];
    [UIView setAnimationCurve:UIViewAnimationCurveEaseInOut];
    [UIView setAnimationDelegate:self];

    myView.center = CGPointMake(xPos, yPos);

[UIView commitAnimations];
Run Code Online (Sandbox Code Playgroud)

}

它过去工作得很好,但无论如何......我们都知道这在Autolayout中不起作用了.所以我把它改成了以下内容:

-(void)animateButton:(UIView *)myView {

    [UIView animateWithDuration:8.0f animations:^{
        _viewConstA.constant = 45.0;
        [myView layoutIfNeeded];
    }];
Run Code Online (Sandbox Code Playgroud)

}

当动作发生时,它不是从故事板中设置的初始位置开始,而是从左上角的1​​x1像素视图开始,向下动画到它最后的休息位置(而不是像我一样向上移动15像素)打算它).

现在,如果我取出[myView layoutIfNeeded]; 部分,动作将视图定位在恰当的位置......但它不会在那里制作动画.当视图出现时,它就在那里.

第一个屏幕抓取是初始位置.第二次抓住应该是最后休息的地方.第三是从错误的点和方向动画的视图.

想法/评论?我到底做错了什么?我以为这会很容易......我必须错过一些明显的东西.

在此输入图像描述

在此输入图像描述

在此输入图像描述

Rob*_*Rob 6

当我从中调用以下基于块的动画时viewDidLoad,它会将帧从CGRectZero最终位置设置为动画.但是,如果我从中调用它viewDidAppear,它就像预期的那样工作.

- (void)animateMovementByConstraint
{
    [UIView animateWithDuration:0.5
                     animations:^{
                         self.topLayoutConstraint.constant = 100;
                         [self.view layoutIfNeeded];
                     }];
}
Run Code Online (Sandbox Code Playgroud)

(在这个例子中,我topLayoutConstraintIBOutlet在Interface Builder中为我想要设置动画的控件的顶部垂直约束定义的.)

有了自动布局,自从我开始启动动画后viewDidAppear,我没有遇到任何问题.