1

我正在使用动画视图[UIView animateWithDuration:...]序列。UIImageView像这样:

[UIView animateWithDuration:1.0 animations:^{
    imageView.frame = newImageRectPosition;
}completion:^(BOOL finished){
 //animate next UIImageView
}];

我需要动画“下一个 UIImageView”,而不是完成。我需要在上一个动画的中间设置“下一个 UIImageView”,而不是在完成时。有可能这样做吗?

4

2 回答 2

2

您可以设置两个 UIView 动画块,其中一个具有第一个动画持续时间的一半的延迟:

[UIView animateWithDuration:1.0 
                 animations:^{ ... }
                 completion:^(BOOL finished){ ... }
];

[UIView animateWithDuration:1.0
                      delay:0.5
                    options:UIViewAnimationCurveLinear
                 animations:^{ ... }
                 completion:^(BOOL finished) { ... }
];
于 2012-10-22T17:14:15.073 回答
0

您可以使用许多选项来实现您所追求的效果。想到的一个是计时器的使用。

使用 NSTimer,其触发间隔为动画的一半,并让计时器触发另一个动画。只要两个动画互不干扰,应该没问题。

一个例子是这样的:

NSTimer* timer;
// Modify to your uses if so required (i.e. repeating, more than 2 animations etc...)
timer = [NSTimer scheduledTimerWithTimeInterval:animationTime/2 target:self selector:@selector(runAnimation) userInfo:nil repeats:NO];

[UIView animateWithDuration:animationTime animations:^{
    imageView.frame = newImageRectPosition;
} completion:nil];

- (void)runAnimation
{ 
    // 2nd animation required
    [UIView animateWithDuration:animationTime animations:^{
        imageView.frame = newImageRectPosition;
    } completion:nil];
}

使用计时器,如果您需要制作两个以上的动画,这可以扩大,如果您稍后需要更改动画时间,这一切都会保持在一起。

于 2012-10-22T17:19:52.517 回答