如何在 applicationDidEnterBackground 中停止 UIDynamicAnimator

Posted

技术标签:

【中文标题】如何在 applicationDidEnterBackground 中停止 UIDynamicAnimator【英文标题】:How to stop UIDynamicAnimator in applicationDidEnterBackground 【发布时间】:2014-08-26 04:28:57 【问题描述】:

applicationDidEnterBackground 被调用时,如何停止UIDynamicAnimator?另外,如何在applicationWillEnterForeground 中启动计时器?这是我的代码:

在我的游戏视图controller.m

 -(void)stoptime

     [_animator removeAllBehaviors]; //_animator is my UIDynamicAnimator
      [time invalidate];

在我的app delegate.m

- (void)applicationDidEnterBackground:(UIApplication *)application

       gameViewController *new=[[gameViewController   alloc]initWithNibName:@"gameViewController" bundle:nil];
    [new stoptime];

【问题讨论】:

【参考方案1】:

使用NSNotificationCenter。在您的视图控制器中,监听通知(viewDidLoad):

[[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(stoptime) name:@"StopTimeNotification" object:nil];

那么,在你的applicationDidEnterBackground:

- (void)applicationDidEnterBackground:(UIApplication *)application

    [[NSNotificationCenter defaultCenter] postNotificationName:@"StopTimeNotification" object:nil];

最后,在您的stoptime 方法中:

-(void)stoptime 

    [_animator removeAllBehaviors]; //_animator is my UIDynamicAnimator
    [time invalidate];
    time = nil;

当您的视图控制器即将被释放时,请务必调用以下代码:

[[NSNotificationCenter defaultCenter] removeObserver:self];

另外两个 cmets:

1 - 使计时器无效时,最好也将其设置为 nil,这样您以后可以重复使用它

2 - 不要使用new 作为任何变量的名称,它是保留关键字。

编辑

您可以使用类似的方法重新启动计时器。

【讨论】:

以上是关于如何在 applicationDidEnterBackground 中停止 UIDynamicAnimator的主要内容,如果未能解决你的问题,请参考以下文章

在QGIS中如何添加天地图的WMTS

如何在表单提交后保留文本(如何在提交后不删除自身?)

如何在异步任务中调用意图?或者如何在 onPostExecute 中开始新的活动?

在 Avkit 中如何使用这三行代码,以及如何将音乐静音”

如何在 JDBC 中启动事务?

如何在 Fragment 中调用 OnActivityResult 以及它是如何工作的?