我有一个控制器,它将名为UIView
的自定义Circle
类添加为子视图。让我们调用Circle
,“circle”的特定实例。
我在Circle
,animateExpand
中有一个方法,它通过为视图设置动画来扩展圆圈。
在下面的代码中(位于控制器中)我想alloc
和init
一个圆圈,将其添加到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
。
任何解决方案都会有所帮助,谢谢!
答案 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。