重复UIAnimation块,以及再次停止它的方法

时间:2011-07-07 19:46:35

标签: cocoa-touch ios4 core-animation objective-c-blocks uiviewanimation

我想在我的应用中添加一个小型加载器动画。我之前用CGAnimations做过重复动画没有问题,这次我是采用块方法。

我正在做一个小测试,但可以重复以下代码:

- (void) startLoading {

    __block int count = 0;

    [UIView animateWithDuration:0.4
                          delay: 0.0
                        options: UIViewAnimationOptionRepeat
                     animations:^{
                         count++;
                     }
                     completion:^(BOOL finished){

                         if (count > 5)
                             count = 0;
                         NSLog(@"%d", count);

                     }];

}

- (void) stopLoading {

}

以上内容仅触发完成块一次,不重复。

如何让块重复以使计数递增?

如果我正常工作并将动画放入重复块中, stopLoading的内容:再次停止动画?

感谢您提供的任何帮助:)

1 个答案:

答案 0 :(得分:5)

这是一个有限的重复动画:

- (void) animate: (int) count {
    CGPoint origC = v.center;
    void (^anim) (void) = ^{
        v.center = CGPointMake(100,100);
    };    
    void (^after) (BOOL) = ^(BOOL finished) {
        v.center = origC;
        if (count)
            [self animate:count-1];
    };
    int opts = UIViewAnimationOptionAutoreverse;
    [UIView animateWithDuration:1 delay:0 options:opts 
                     animations:anim completion:after];
}

这里有一个递归,所以我们不想过火或者我们的内存不足,但是如果我们限制我们的数量(在你的例子中它是5)我们应该没问题。