如何无限播放连续动画?

时间:2014-01-23 08:54:18

标签: uiview uianimation

我有一系列动画应该一个接一个地触发延迟。我使用的代码工作正常,但我希望我动画的所有视图无限制地在一个圆圈中动画。

这是代码:

[UIView animateWithDuration:2.0
                      delay:2.0
                    options: UIViewAnimationOptionTransitionNone
                 animations:^{
                     carouselTextView.frame=CGRectMake(-320, 200, 1600, 150);

                 }
                 completion:^(BOOL finished){
                      {
                         [UIView animateWithDuration:2.0
                                               delay:2.0
                                             options: UIViewAnimationOptionTransitionNone
                                          animations:^{
                                              carouselTextView.frame=CGRectMake(-640, 200, 1600, 150);

                                          }
                                          completion:^(BOOL finished){
                                               {
                                                  [UIView animateWithDuration:2.0
                                                                        delay:2.0
                                                                      options: UIViewAnimationOptionTransitionNone
                                                                   animations:^{
                                                                       carouselTextView.frame=CGRectMake(-960, 200, 1600, 150);

                                                                   }
                                                                   completion:^(BOOL finished){
                                                                       [UIView animateWithDuration:2.0
                                                                                             delay:2.0
                                                                                           options: UIViewAnimationOptionTransitionNone
                                                                                        animations:^{
                                                                                            carouselTextView.frame=CGRectMake(-1280, 200, 1600, 150);

                                                                                        }
                                                                                        completion:^(BOOL finished){

                                                                                        }];                                                                       }];
                                              };
                                          }];
                     };
                 }];

2 个答案:

答案 0 :(得分:1)

您不应该从完成部分的开头再次编写所有动画,您需要做的就是再次运行该方法,代码如下:

completion:^(BOOL finished){
    [self methodYouNamed];
}

在完成部分编写代码,这里的语法很简单,只要你的动画完成就会说**,再次运行方法,这不会结束,并且会永远继续下去**

答案 1 :(得分:0)

好的,我会帮忙的。首先,您需要从常量部分中辨别动画序列的变量部分。提供变量部分的某种数据存储,并使用方法循环它们。

所以看一下代码,我所能看到的就是这一点:

carouselTextView.frame=CGRectMake(...);

(注意所有这些代码都在你班级的实现文件中)。

所以我们将它们存储在static数组中(它是static,因为我假设值永远不会改变,但是如果它们可以改变那么它们将需要是类的实例变量):< / p>

static CGRect _carouselTextViewFrames[] = {
    {-320, 200, 1600, 150},
    {-640, 200, 1600, 150},
    {-960, 200, 1600, 150},
    {-1280, 200, 1600, 150}
};
const NSInteger NUM_CAROUSEL_TEXT_FIELD_FRAMES = sizeof(_carouselTextViewFrames) / sizeof(_carouselTextViewFrames[0]);

接下来,我们需要跟踪当前的轮播文本视图框(_carouselTextViewFrames[]的索引)。这必须是一个实例变量:

@interface YourClass ()
// private property
@property (nonatomic, assign) NSInteger carouselTextViewFrameIndex;
@end

并且必须将其初始化为-1,因此使用的第一个索引为0(请参阅下面的nextCarouselAnimation):

- (id)init {    // Or whatever designated initializer is used in your class
    self = [super init];
    if (self) {
        self.carouselTextViewFrameIndex = -1;
    }
    return self;
}

现在将开始下一个动画的方法:

- (void)nextCarouselAnimation {
    self.carouselTextViewFrameIndex = (self.carouselTextViewFrameIndex + 1) % NUM_CAROUSEL_TEXT_FIELD_FRAMES;

    [UIView animateWithDuration:2.0
                          delay:2.0
                        options:UIViewAnimationOptionTransitionNone
                     animations:^{
                         carouselTextView.frame = _carouselTextViewFrames[self.carouselTextViewFrameIndex];
                     }
                     completion:^(BOOL finished){
                         [self nextCarouselAnimation];
                     }];
}

最后你只需要从适当的地方调用nextCarouselAnimation来开始动画循环(你没有说出你的类来自哪个,所以我不知道那可能是什么)。< / p>

注意:此代码未经测试,可能包含许多错误。