在 didEnterBackground 之后如何继续 UIImageView 动画?

Posted

技术标签:

【中文标题】在 didEnterBackground 之后如何继续 UIImageView 动画?【英文标题】:How to continue UIImageView animation after didEnterBackground? 【发布时间】:2012-09-05 19:11:35 【问题描述】:

我有一个简单的 UIImageView (myimageview) 加载了 NSArray(animationArray) 的动画图像(在我的 ViewController.m) 中:

[self.myimageview setAnimationImages:self.animationArray];
[self.myimageview setAnimationDuration:[self durationTime]];
[self.myimageview setAnimationRepeatCount: 1];
[self.myimageview startAnimating];

我知道在哪里使用 stopAnimating 等。但是我有一个奇怪的问题。当屏幕锁定时,我的动画没有任何反应。任何东西都像魅力一样。解锁屏幕后它会继续。

但是,当我的应用程序进入 后台模式 时,整个动画就会停止(我的动画时长为 2-3 分钟,因此这是不可接受的)。我搜索了一下,发现了这个话题:

How to pause a UIImageView animation

它说使用此代码的地方:

UIView *viewBeingAnimated = //your view that is being animated
viewBeingAnimated.frame = [[viewBeingAnimated.layer presentationLayer] frame];
[viewBeingAnimated.layer removeAllAnimations];
//when user unpauses, create new animation from current position.

现在我正在尝试在 AppDelegate.m 中的代码中实现这一点

// in -(void)applicationDidEnterBackground:
self.viewController.myimageview.frame = [[self.myimageview.frenchPress.layer presentationLayer] frame];

但是我在 XCode 中遇到了这个问题(对于上面的行),我无法继续:

AppDelegate.m:40:47: Receiver type 'CALayer' for instance message is a forward declaration

如果我退出到后台值,我会节省时间:self.currentDate(仅作为旁注,以防我们需要它)。

如何在不中断的情况下暂停和播放动画?

【问题讨论】:

【参考方案1】:

为了访问CALayer的所有消息和属性,您必须包含其相应的框架头:

#import <QuartzCore/QuartzCore.h>

这有望消除警告。

【讨论】:

感谢您解决标题问题的评论,但是我不知道如何从我知道的框架中取消暂停。有什么建议对我有帮助吗? @FatihArslan 试试viewBeingAnimated.animationImages = nil; 这会将我的图像设置为零。我之前已经设置了一个数组。这不会破坏我的形象吗?如果我调用它,那么我如何从最新的帧继续。 @FatihArslan 你也可以试试[viewBeingAnimated stopAnimating]; 我想我无法向你解释自己。对于我的第一个 sn-p。假设我已经打电话给startAnimating。然后我进入后台,保存我得到的最新帧。然后呢。我应该在同一个视图上再次调用startAnimating,程序是什么?

以上是关于在 didEnterBackground 之后如何继续 UIImageView 动画?的主要内容,如果未能解决你的问题,请参考以下文章

didenterbackground后如何更改状态栏?

带有 UIDocument 的核心数据:新对象的关系在 didEnterBackground 和重新打开后被破坏

没有任何应用程序代表(didEnterBackground 或 willResignActive)在截屏时被调用

iOS 7 如何使用 NSUserDefaults 保存 NSNumber?

当应用程序在后台时,Xcode 更改视图

每当应用程序未运行时如何加密核心数据数据库