如果动画块是动画完成时如何检查

时间:2011-01-04 02:39:38

标签: iphone cocoa-touch ios4

我有一个控制器,它将名为UIView的自定义Circle类添加为子视图。让我们调用Circle,“circle”的特定实例。

我在CircleanimateExpand中有一个方法,它通过为视图设置动画来扩展圆圈。

在下面的代码中(位于控制器中)我想allocinit一个圆圈,将其添加到NSMutableArray circleArray,为扩展设置动画,并在结束时扩展,我想从数组中删除对象。我的尝试:

Circle *circle = [[Circle alloc] init];
[circleArray addObject:circle];
[circle animateExpand];
[circleArray removeObjectIdenticalTo:circle];  
[circle release];

问题是在动画结束前调用[circleArray removeObjectIdenticalTo:circle];。 Presumbly因为动画是在一个单独的线程上完成的。我无法在completion:^(BOOL finished){ }中实施删除,因为Circle类不了解circleArray

任何解决方案都会有所帮助,谢谢!

2 个答案:

答案 0 :(得分:4)

尝试:

Circle *circle = [[Circle alloc] init];
if (circle) {
    [circleArray addObject: circle];

    [UIView
        animateWithDuration: 1.0 // or whatever
        animations: ^ {
            // the animations in -animateExpand "belong to" this outer animation block
            [circle animateExpand];
        }
        completion: ^ (BOOL finished) {
            [circleArray removeObjectIdenticalTo: circle];
        }];

    [circle release];
}

答案 1 :(得分:0)

如果我没弄错的话,就没办法停止当前的视图动画。但是,如果将新动画应用于视图,它将停止当前运行的动画。在这种情况下,在移除圆圈之前,您可以开始非常短的动画周期(例如,0.1秒),这不会做太多。然后执行remove。