使用Autolayout查看不动画

时间:2013-03-20 18:16:12

标签: ios uiview uiviewanimation 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];

}

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

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

    [UIView animateWithDuration:8.0f animations:^{
        _viewConstA.constant = 45.0;
        [myView layoutIfNeeded];
    }];

}

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

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

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

思考/评论?我到底做错了什么?我认为这将是如此简单......我必须错过一些明显的东西。

enter image description here

enter image description here

enter image description here

1 个答案:

答案 0 :(得分:6)

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

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

(在此示例中,topLayoutConstraint是我在Interface Builder中为我想要设置动画的控件的顶部垂直约束定义的IBOutlet。)

使用自动布局,因为我已经开始在viewDidAppear中启动动画,所以我没有遇到任何问题。