在swift3中
我想在应用处于后台状态时更改屏幕以隐藏原始屏幕。
例如,如果您在应用程序运行时按住主屏幕按钮两次,屏幕将更改为其他屏幕。
我想将屏幕设置为更改为LaunchScreen。
感谢您的帮助。
答案 0 :(得分:1)
这是常见的情况,我们希望在应用程序处于堆叠状态时,在进入BG或覆盖应用程序屏幕时避免使用iOS进行屏幕截图。
以下是我正在做的事情:
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
}
}
}
此课程还负责设备轮换。
答案 1 :(得分:0)
“如果您不希望应用程序在退出时保留在后台,则可以通过将UIApplicationExitsOnSuspend键添加到应用程序的Info.plist文件并将其值设置为YES来明确选择退出后台执行模型。
当应用程序选择退出时,它会在非运行状态,非活动状态和活动状态之间循环,并且永远不会进入后台或暂停状态。
当用户点击Home按钮退出应用程序时,将调用应用程序委托的applicationWillTerminate:方法,并且应用程序有大约五秒钟的时间来清理并退出,然后终止并返回到未运行状态。 “ 小号
答案 2 :(得分:0)
试试这个:
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(101) as? UIImageView {
imageView.removeFromSuperview()
}
}
答案 3 :(得分:0)
在AppDelegate中添加此功能。
func applicationWillResignActive(_ application: UIApplication) {
// Change the view to show what you want here.
}
调用此方法可让您的应用知道它即将移动 从活动状态到非活动状态。这可能发生在某些类型的 暂时中断(例如来电或短信) 消息)或当用户退出应用程序并开始转换时 到了背景状态。