在 swift3
当应用程序处于后台状态时,我想更改屏幕以隐藏原始屏幕。
例如,如果您在应用程序运行时按两次主页按钮,屏幕将变为另一个屏幕。
我想将屏幕设置为 LaunchScreen。
谢谢您的帮助。
在 swift3
当应用程序处于后台状态时,我想更改屏幕以隐藏原始屏幕。
例如,如果您在应用程序运行时按两次主页按钮,屏幕将变为另一个屏幕。
我想将屏幕设置为 LaunchScreen。
谢谢您的帮助。
试试这个:
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()
}
}
在您的 AppDelegate 中添加此功能。
func applicationWillResignActive(_ application: UIApplication) {
// Change the view to show what you want here.
}
调用此方法是为了让您的应用知道它即将从活动状态变为非活动状态。这可能发生在某些类型的临时中断(例如来电或短信)或当用户退出应用程序并开始转换到后台状态时。
这是一种常见的场景,我们希望避免 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
}
}
}
此类还负责设备旋转。
“如果您不希望应用程序在退出时保留在后台,您可以通过将 UIApplicationExitsOnSuspend 键添加到应用程序的 Info.plist 文件并将其值设置为 YES 来明确选择退出后台执行模型。
当应用程序选择退出时,它会在未运行、非活动和活动状态之间循环,并且永远不会进入后台或挂起状态。
当用户点击 Home 按钮退出应用程序时,应用程序委托的 applicationWillTerminate: 方法被调用,应用程序有大约 5 秒的时间清理并退出,然后终止并移回未运行状态。" s