我将UIView分类。它的一些子视图是动画的。重启这些的正确方法是什么?

时间:2013-03-23 00:52:40

标签: ios animation uiview subclass restart

好的,所以我将UIView子类化,视图中有一堆子视图。这些子视图是动画。当我将另一个View Controller推到顶部,或者应用程序进入后台时,动画就会停止。

在我的子视图中重启这些动画的正确方法是什么。我不希望视图控制器告诉View重新启动它们,因为我觉得View应该知道何时需要重新启动而不被另一个对象明确告知。

但是我不能在子类UIView上使用layoutSubviews,因为正在发生的动画是添加新的UIImageViews。当发生这种情况时,将在UIView子类上调用layoutSubviews。所以layoutSubviews被大量调用,我不能用它来重启动画。

思想?

UPDATE - 动画代码看起来像这样......但我认为这不重要。

[UIView animateWithDuration:ANIMATION_DURATION delay:0 options:UIViewAnimationOptionCurveLinear     animations:^{
    [subview setFrame:finalFrame];
} completion:^(BOOL finished) {
    [subview removeFromSuperview];
}];

2 个答案:

答案 0 :(得分:0)

使用NSNotificationCenter通知视图控制器再次出现:

在你的UIView中,在init方法中添加:

[[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(methodToExecuteWhenUIViewControllerComesBackUp:) name:@"Came Back" object:nil];

然后在“其他viewController”中,在再次显示原始控制器的方法中,添加:

[[NSNotificationCenter defaultCenter] postNotificationName:@"Came Back" object:nil];

然后当您呈现原始viewController时,将通知您的UIView。为要恢复的每个子视图重复第一段代码。

当任何子视图被删除(释放)为内存时,请确保执行:

[[NSNotificationCenter defaultCenter] removeObserver:self];

如果上述代码未执行,通知中心将尝试通知不再存在的对象,从而导致您的应用崩溃。

答案 1 :(得分:0)

请勿使用UIView Animation,最好使用Core Animation

CAAnimation中,它有一个名为removedOnCompletion的属性,默认YES将其设置为NOyourCAAnimation.removedOnCompletion = NO;)它将使您的应用程序来自{{1} {}为background,动画也foreground

苹果说:

<强> removedOnCompletion

animated