ios动画.嵌套动画如何影响持续时间?

Cin*_*lia 6 objective-c uiviewanimation ios

假设我有一个定时的UIAnimation,格式为

[UIView animateWithDuration:DURATION_X
                 animations:^
 {
     [function that might contain a separate animation with DURATION_Y]
 }
                 completion:^(BOOL finished)
 {
     [function that might contain a separate animation with DURATION_Z]
 }];
Run Code Online (Sandbox Code Playgroud)

如果嵌套动画中也有持续时间,那么它会如何影响外部动画?无论DURATION_X恰好是什么,内部动画是分别用DURATION_Y和DURATION_Z执行的吗?或DURATION_Y动画按比例缩小或缩短相对于DURATION_X结束,假设DURATION_X <= DURATION_Y?

基本上,我简单地问我们如何安全地控制内部动画的持续时间,以确保它们执行DURATION_Y(而不是一些较短的版本),即使最外面的动画有不同的DURATION_X?

Gen*_*ted 2

AFAIU,内部动画控制外部动画块中提到的持续时间。然而,完成块内的函数似乎不会等到主动画块在给定的持续时间内完成其动画任务。

因此,假设 DURATION_X 为 5 秒,DURATION_Y 为 20 秒,DURATION_Z 为 10 秒。发生的情况是,一旦控件完成主动画块(转到函数并执行任何操作),完成块内的动画函数就会被触发(话虽如此,主动画块内的函数确实有不同的持续时间)。因此,完成块内的函数将使用 DURATION_Z 执行,并且它会在 DURATION_Z 中提到的确切持续时间内进行动画处理。

另外,主动画块内的函数仅在 DURATION_X 中指定的持续时间内执行。它忽略 DURATION_Y 的持续时间。这里有一个古怪的代码片段:

-(void)doSomeAnim
{
    [UIView animateWithDuration:5.0
                     animations:^
     {
         [self animateOrangeBoy];
     }
                     completion:^(BOOL finished)
     {
         [self animateBlueBoy];
     }];

}

-(void)animateOrangeBoy
{
    [UIView animateWithDuration:20.0 animations:^{
        orangeView.frame = CGRectMake(orangeView.frame.origin.x, orangeView.frame.origin.y + 300, orangeView.frame.size.width, orangeView.frame.size.height);
    }];
}

-(void)animateBlueBoy
{
    [UIView animateWithDuration:10.0 animations:^{
        blueView.frame = CGRectMake(blueView.frame.origin.x, blueView.frame.origin.y + 300, blueView.frame.size.width, blueView.frame.size.height);
    }];
}
Run Code Online (Sandbox Code Playgroud)

所以,animateBlueBoy也从 开始,animateOrangeBoyanimateOrangeBoy只持续 5 秒,但animateBlueBoy一直持续到 10 秒。