swift - 恢复 animateWithDuration 。返回前台后重复

标签 swift uiview background foreground animatewithduration

不幸的是,我发现一旦您将应用程序最小化到主屏幕,UIView.animateWithDuration 就会停止,并且一旦您将其带回前台就不会恢复。

我花了最后一个小时试图弄清楚如何解决这个问题(通过检测背景/前景切换),结果添加了一个观察者。我做到了,并通过控制台中的调试消息成功检测到它;但是,我确定如何在我的 View 中恢复动画。当应用程序加载回前台时,暂停/恢复甚至重新启动动画的正确方法是什么?

ViewController.swift

class ViewController: UIViewController {
    func cameBackFromSleep(sender : AnyObject) {
        // Restart animation here or resume?
        print ("If you can see this, congrats... observer works :-)")
    }

    override func viewDidLoad() {
        super.viewDidLoad()

        // Observer to detect return from background
        NSNotificationCenter.defaultCenter().addObserver(    self,    selector: #selector(ViewController0.cameBackFromSleep(_:)),    name: UIApplicationDidBecomeActiveNotification,    object: nil    )

        // Add a label
        let label = UILabel(frame: CGRectMake(0, 600 , 200, 200 ))
        label.text = "test message"
        label.font = UIFont.boldSystemFontOfSize(12)
        label.sizeToFit()
        self.view.addSubview(label)

        // Animation to move label
        func animateText() {
            UIView.animateWithDuration(2.0, delay: 0.0, options: [ .Autoreverse, .Repeat, .CurveEaseInOut, .BeginFromCurrentState], animations: {
                label.alpha = 0.3
                label.frame.origin.x = ((global.maxwidth/2) * -1) 
                }, completion: { finished in
                    if finished {
                        label.frame.origin.x = 0.0
                    }
            })
        }

        // This guy here stops once you minimize the app to background
        animateText()
    }
}

最佳答案

animateText() 放入 comeBackFromSleep(_:) 中。我认为恢复动画有点困难,所以只需重新启动它即可。

因此,该行为在某种程度上是有意义的(您可以自己查看 AppDelegate 的方法):

func applicationDidBecomeActive(application: UIApplication) {
    // Restart any tasks that were paused (or not yet started) while the application was inactive. If the application was previously in the background, optionally refresh the user interface.
}

它指出您应该刷新 UI(包括动画)。因此,将应用程序置于后台后,动画停止是正常行为。

关于swift - 恢复 animateWithDuration 。返回前台后重复,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36951768/

相关文章:

ios - 使用 InputAccessoryView 在键盘顶部添加一个 View

swift - 核心数据 swift 中的预装数据

html - AngularJS - 如何获取 ui-view 的当前 HTML 模板文件的名称?

ios - 一半屏幕无法点击

ios - 如何在不使用原型(prototype)单元的情况下创建表格 View 单元?

ios - 您可以为 NSKeyedArchiver archivedDataWithRootObject 禁用 "mangled runtime name"崩溃/警告吗?

iphone - iOS 6 View 层次结构噩梦

android - android中形状的角颜色

html - 在 iOS iPhone/iPad 上删除背景 HTML5-Video/WEBVTT 字幕

ios - 我可以在 iOS 中确定应用程序是从待机状态还是从多任务处理恢复