使用animateWithDuration以相同的速度为两个视图设置动画

时间:2014-01-29 12:40:03

标签: ios

我有两个UIViews,我想以相同的速度同时移动。

[UIView animateWithDuration:0.25 animations:^ {
    myView1.frame = CGRectMake(0.0, 0.0, 100.0, myView1.frame.size.height - 50.0);
    myView2.frame = CGRectMake(0.0, 0.0, 100.0, myView1.frame.size.height - 100.0);
 }];

但是,执行上述操作意味着myView2的动画速度是myView1的两倍。

如何让两个视图以相同但相同的速度进行动画处理(以便一个完成,然后是另一个,但是它们会同时开始制作动画)?

1 个答案:

答案 0 :(得分:5)

同时启动它们并将需要两次旅行的动画提供两倍的时间:

[UIView animateWithDuration:0.25 animations:^ {
    myView1.frame = CGRectMake(0.0, 0.0, 100.0, myView1.frame.size.height - 100.0);
}];

[UIView animateWithDuration:0.5 animations:^ {
    myView2.frame = CGRectMake(0.0, 0.0, 100.0, myView1.frame.size.height - 50.0);
}];

基本速度数学。


另一种方法:

[UIView animateWithDuration:0.25 animations:^{
    myView1.frame = CGRectMake(0.0, 0.0, 100.0, myView1.frame.size.height - 50.0);
    myView2.frame = CGRectMake(0.0, 0.0, 100.0, myView1.frame.size.height - 50.0);
}
                                  completion:^{
    [UIView animateWithDuration:0.25 animations:^{
        myView2.frame = CGRectMake(0.0, 0.0, 100.0, myView1.frame.size.height - 50.0);
    }];
}];

我不确定哪种方法更好或者更受欢迎。

第一种方法使用两个单独的animateWithDuration调用,每个视图一个,其中一个在两倍的时间内设置两倍的距离(因此整体速度相同)。

第二种方法通过animateWithDuration块使用对completion的嵌套调用。首先,两个视图以相同的速度动画到相同的大小。接下来,需要两倍距离的视图为剩余距离(以相同的速度)设置动画。