2

在 swift3

当应用程序处于后台状态时,我想更改屏幕以隐藏原始屏幕。

例如,如果您在应用程序运行时按两次主页按钮,屏幕将变为另一个屏幕。

我想将屏幕设置为 LaunchScreen。

谢谢您的帮助。

4

4 回答 4

2

试试这个:

func applicationDidEnterBackground(_ application: UIApplication) {

    let imageView = UIImageView(frame: self.window!.bounds)
    imageView.tag = 1001
    imageView.image = UIImage(named: "") //your image goes here

    UIApplication.shared.keyWindow?.subviews.last?.addSubview(imageView)
 }

func applicationWillEnterForeground(_ application: UIApplication) {
    if let imageView : UIImageView = UIApplication.shared.keyWindow?.subviews.last?.viewWithTag(1001) as? UIImageView {
        imageView.removeFromSuperview()
    }

}
于 2017-05-24T13:38:28.307 回答
1

在您的 AppDelegate 中添加此功能。

func applicationWillResignActive(_ application: UIApplication) {
    // Change the view to show what you want here.
}

调用此方法是为了让您的应用知道它即将从活动状态变为非活动状态。这可能发生在某些类型的临时中断(例如来电或短信)或当用户退出应用程序并开始转换到后台状态时。

来源:https ://developer.apple.com/reference/uikit/uiapplicationdelegate/1622950-applicationwillresignactive

于 2017-05-24T13:39:48.567 回答
1

这是一种常见的场景,我们希望避免 iOS 在进入 BG 时截屏或在应用处于堆栈时覆盖应用屏幕。

这是我正在做的事情:

class AppDelegate: UIResponder, UIApplicationDelegate {

  var window: UIWindow?
  private var appCoverWindow: UIWindow?
  private var appCoverVC: UIViewController?

  func applicationDidBecomeActive(_ application: UIApplication) {
    if appCoverWindow != nil {
        appCoverWindow!.isHidden = true
        appCoverWindow!.rootViewController = nil
        appCoverWindow = nil
        appCoverVC = nil
    }
  }

  func applicationWillResignActive(_ application: UIApplication) {
    appCoverVC = rootViewController().storyboard!.instantiateViewController(withIdentifier: "AppCoverVCId") as! AppCoverViewController
    appCoverWindow = UIWindow(frame: UIScreen.main.bounds)
    let existingTopWindow = UIApplication.shared.windows.last
    appCoverWindow!.windowLevel = existingTopWindow!.windowLevel + 1
    appCoverVC!.view.frame = appCoverWindow!.bounds
    appCoverWindow!.rootViewController = appCoverVC!
    appCoverWindow!.makeKeyAndVisible()
  }

  class func appLaunchImage() -> UIImage? {
    //this method will return LaunchImage
    let launchImageNames = Bundle.main.paths(forResourcesOfType: "png", inDirectory: nil).filter { (imageName) -> Bool in
        return imageName.contains("LaunchImage")
    }

    for imageName in launchImageNames {
        guard let image = UIImage(named: imageName) else { continue }

        // if the image has the same scale and dimensions as the current device's screen...
        if (image.scale == UIScreen.main.scale) && (image.size.equalTo(UIScreen.main.bounds.size)) {
            return image
        }
    }
    return nil
  }
}

UIWindow我们也可以直接使用,而不是使用覆盖应用程序,UIViewController但是如果在去 BG 时存在键盘,这可能会导致问题。

这是AppCoverViewController.swift:(
故事板中有XIB,全屏UIImageView

class AppCoverViewController: BaseViewController {

  @IBOutlet weak var bgImageView: UIImageView!//full screen image view

  override func viewDidLoad() {
    super.viewDidLoad()
    if let image = AppDelegate.appLaunchImage() {
        bgImageView.image = image
    }
  }

  override func deviceOrientationDidChange() {
    if let image = AppDelegate.appLaunchImage() {
        bgImageView.image = image
    }
  }
}

此类还负责设备旋转。

于 2017-05-24T13:40:45.407 回答
1

“如果您不希望应用程序在退出时保留在后台,您可以通过将 UIApplicationExitsOnSuspend 键添加到应用程序的 Info.plist 文件并将其值设置为 YES 来明确选择退出后台执行模型。

当应用程序选择退出时,它会在未运行、非活动和活动状态之间循环,并且永远不会进入后台或挂起状态。

当用户点击 Home 按钮退出应用程序时,应用程序委托的 applicationWillTerminate: 方法被调用,应用程序有大约 5 秒的时间清理并退出,然后终止并移回未运行状态。" s

于 2017-05-24T13:30:22.207 回答