在完成之前开始动画UIView?

时间:2012-10-22 17:00:29

标签: iphone objective-c ios animation

我正在使用[UIView animateWithDuration:...]来查看UIImageView次观看的动画序列。像这样:

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

我需要动画'下一个UIImageView'才能完成。我需要在上一个动画的中间动画“下一个UIImageView”,而不是在完成时。是否可以这样做?

2 个答案:

答案 0 :(得分:2)

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

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

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

答案 1 :(得分: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];
}

使用计时器,如果您需要执行两个以上的动画,这可以放大,如果您需要稍后更改动画时间,它们会保持在一起。