好的,所以我将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];
}];
答案 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
将其设置为NO
(yourCAAnimation.removedOnCompletion = NO;
)它将使您的应用程序来自{{1} {}为background
,动画也foreground
<强> removedOnCompletion 强>
animated