Visualización de la pantalla de bienvenida durante más tiempo que los segundos predeterminados

¿Es posible mostrar Default.png durante un número específico de segundos? Tengo un cliente que quiere que se muestre la pantalla de bienvenida durante más tiempo que su hora actual.

Les gustaría que se muestre durante 2 o 3 segundos.

No, el default.png se muestra mientras la aplicación se inicia.

Puede agregar un nuevo controlador de visualización que mostrará el valor didFinishLoading en la aplicación didFinishLoading .

De esta manera, muestra default.png un poco más.

Solo debe mostrar default.png si está cargando datos, lo que podría llevar algún tiempo. Tal como lo establecen las directrices de la tienda de aplicaciones, no debe retrasar el inicio de su cuenta más de lo necesario.

También puedes usar NSThread :

 [NSThread sleepForTimeInterval:(NSTimeInterval)]; 

Puede poner este código en la primera línea del método applicationDidFinishLaunching .

Por ejemplo, muestra default.png por 5 segundos.

 - (void) applicationDidFinishLaunching:(UIApplication*)application { [NSThread sleepForTimeInterval:5.0]; } 

Agregue esto a su application:didFinishLaunchingWithOptions: :

Rápido:

 // Delay 1 second NSRunLoop.currentRunLoop().runUntilDate(NSDate(timeIntervalSinceNow: 1)) 

C objective:

 // Delay 1 second [[NSRunLoop currentRunLoop]runUntilDate:[NSDate dateWithTimeIntervalSinceNow: 1]]; 

Si está utilizando LaunchScreen.storyboard, puede obtener el mismo controlador de vista y presentarlo: (recuerde configurar el ID del guión gráfico, por ejemplo, “LaunchScreen”)

 func applicationDidBecomeActive(application: UIApplication) { let storyboard = UIStoryboard(name: "LaunchScreen", bundle: nil) let vc = storyboard.instantiateViewControllerWithIdentifier("LaunchScreen") self.window!.rootViewController!.presentViewController(vc, animated: false, completion: nil) } 

Este tutorial muestra la pantalla de bienvenida durante 2 segundos. Puede cambiarlo fácilmente para adaptarlo a sus necesidades.

 - (void)showSplash { UIViewController *modalViewController = [[UIViewController alloc] init]; modalViewController.view = modelView; [self presentModalViewController:modalViewController animated:NO]; [self performSelector:@selector(hideSplash) withObject:nil afterDelay:yourDelay]; } 

Esto funcionó para mí en Xcode 6.3.2, Swift 1.2:

 import UIKit class ViewController: UIViewController { var splashScreen:UIImageView! override func viewDidLoad() { super.viewDidLoad() self.splashScreen = UIImageView(frame: self.view.frame) self.splashScreen.image = UIImage(named: "Default.png") self.view.addSubview(self.splashScreen) var removeSplashScreen = NSTimer.scheduledTimerWithTimeInterval(2.0, target: self, selector: "removeSP", userInfo: nil, repeats: false) } func removeSP() { println(" REMOVE SP") self.splashScreen.removeFromSuperview() } override func didReceiveMemoryWarning() { super.didReceiveMemoryWarning() } } 

ViewController es el primer VC de la aplicación que se está cargando.

Use la siguiente línea en didFinishLaunchingWithOptions: delegar método:

 [NSThread sleepForTimeInterval:5.0]; 

Parará la pantalla de inicio durante 5.0 segundos.

En Xcode 6.1, Swift 1.0 para retrasar la pantalla de inicio:

Agregue esto a didFinishLaunchingWithOptions

 NSThread.sleepForTimeInterval(3) 

el tiempo en el () es variable.

Swift 2.0:

1)

 // AppDelegate.swift import UIKit import Foundation @UIApplicationMain class AppDelegate: UIResponder, UIApplicationDelegate { var window: UIWindow? var splashTimer:NSTimer? var splashImageView:UIImageView? func application(application: UIApplication, didFinishLaunchingWithOptions launchOptions: [NSObject: AnyObject]?) -> Bool { window = UIApplication.sharedApplication().delegate!.window! let splashImage: UIImage = UIImage(named: "ic_120x120.png")! splashImageView = UIImageView(image: splashImage) splashImageView!.frame = CGRectMake(0, 0, (window?.frame.width)!, (window?.frame.height)!) window!.addSubview(splashImageView!) window!.makeKeyAndVisible() //Adding splash Image as UIWindow's subview. window!.bringSubviewToFront(window!.subviews[0]) // Here specify the timer. splashTimer = NSTimer.scheduledTimerWithTimeInterval(5.0, target: self, selector: "splashTimerForLoadingScreen", userInfo: nil, repeats: true) return true } func splashTimerForLoadingScreen() { splashImageView!.removeFromSuperview() splashTimer!.invalidate() } 

2)

  func application(application: UIApplication, didFinishLaunchingWithOptions launchOptions: [NSObject: AnyObject]?) -> Bool { NSThread.sleepForTimeInterval(9) OR sleep(9) return true } 

3) Usando el concepto de controlador de vista raíz:

 // AppDelegate.swift import UIKit import Foundation @UIApplicationMain class AppDelegate: UIResponder, UIApplicationDelegate { var window: UIWindow? var splashTimer:NSTimer? var storyboard:UIStoryboard? func application(application: UIApplication, didFinishLaunchingWithOptions launchOptions: [NSObject: AnyObject]?) -> Bool { window = UIWindow(frame: UIScreen.mainScreen().bounds) window?.makeKeyAndVisible() storyboard = UIStoryboard(name: "Main", bundle: nil) //Here set the splashScreen VC let rootController = storyboard!.instantiateViewControllerWithIdentifier("secondVCID") if let window = self.window { window.rootViewController = rootController } //Set Timer splashTimer = NSTimer.scheduledTimerWithTimeInterval(5.0, target: self, selector: "splashTimerCrossedTimeLimit", userInfo: nil, repeats: true) return true } func splashTimerCrossedTimeLimit(){ //Here change the root controller let rootController = storyboard!.instantiateViewControllerWithIdentifier("firstVCID") if let window = self.window { window.rootViewController = rootController } splashTimer?.invalidate() } 

Puede usar el siguiente código:

 - (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions { NSMutableString *path = [[NSMutableString alloc]init]; [path setString:[[NSBundle mainBundle] resourcePath]]; [path setString:[path stringByAppendingPathComponent:@"Default.png"]]; UIImage *image = [[UIImage alloc] initWithContentsOfFile:path]; [path release]; UIImageView *imageView=[[UIImageView alloc]initWithImage:image]; imageView.frame=CGRectMake(0, 0, 320, 480); imageView.tag = 2; [window addSubview:imageView]; [window makeKeyAndVisible]; // Here specify the time limit. timer = [NSTimer scheduledTimerWithTimeInterval:3.0 target:self selector:@selector(timerForLoadingScreen) userInfo:nil repeats:YES]; } -(void)timerForLoadingScreen { [timer invalidate]; if ([window viewWithTag:2]!=nil) { [[window viewWithTag:2]removeFromSuperview]; } // Your any other initialization code that you wish to have in didFinishLaunchingWithOptions } 

Swift 3

Esto es factible de forma segura al presentar el controlador de salpicaduras por el tiempo que especifique, luego lo elimina y muestra su rootViewController normal.

  1. Primero en LaunchingScreen.storyboard dale a tu controlador un identificador StoryBoard digamos “splashController”
  2. En Main.storyboard dale a tu viewController inicial un identificador StoryBoard digamos “initController”. -Este podría ser el navegador o la barra de tabs, etc. …-

En AppDelegate puedes crear estos 2 métodos:

  1.  private func extendSplashScreenPresentation(){ // Get a refernce to LaunchScreen.storyboard let launchStoryBoard = UIStoryboard.init(name: "LaunchScreen", bundle: nil) // Get the splash screen controller let splashController = launchStoryBoard.instantiateViewController(withIdentifier: "splashController") // Assign it to rootViewController self.window?.rootViewController = splashController self.window?.makeKeyAndVisible() // Setup a timer to remove it after n seconds Timer.scheduledTimer(timeInterval: 5, target: self, selector: #selector(dismissSplashController), userInfo: nil, repeats: false) } 

2.

 @objc private func dismissSplashController() { // Get a refernce to Main.storyboard let mainStoryBoard = UIStoryboard.init(name: "Main", bundle: nil) // Get initial viewController let initController = mainStoryBoard.instantiateViewController(withIdentifier: "initController") // Assign it to rootViewController self.window?.rootViewController = initController self.window?.makeKeyAndVisible() } 

Ahora llama

  self.extendSplashScreenPresentation() 

en didFinishLaunchingWithOptions.

Estás listo para ir …

Escribir sleep(5.0)

en - (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions durante 5 segundos.

1.Añada otro controlador de vista en “didFinishLaunchingWithOptions”

  UIStoryboard *storyboard = [UIStoryboard storyboardWithName:@"Main" bundle:nil]; UINavigationController *homeNav = [storyboard instantiateViewControllerWithIdentifier:@"NavigationControllerView"]; UIViewController *viewController = [storyboard instantiateViewControllerWithIdentifier:@"SplashViewController"]; self.window = [[UIWindow alloc] initWithFrame:[[UIScreen mainScreen] bounds]]; self.window.rootViewController = homeNav; [self.window makeKeyAndVisible]; [(UINavigationController *)self.window.rootViewController pushViewController:viewController animated:NO]; } 

2. A la vista se cargó el Controlador SplashView

  [self performSelector:@selector(removeSplashScreenAddViewController) withObject:nil afterDelay:2.0]; 

3. En el método removeSplashScreenAddViewController, puede agregar su controlador de vista principal para, por ejemplo,

 - (void) removeSplashScreenAddViewController {` UIStoryboard *storyboard = [UIStoryboard storyboardWithName:@"Main" bundle:nil]; UINavigationController *homeNav = [storyboard instantiateViewControllerWithIdentifier:@"HomeNav"]; UIViewController *viewController = [storyboard instantiateViewControllerWithIdentifier:viewControllerName]; UIWindow *window = [StaticHelper mainWindow]; window.rootViewController = homeNav; [window makeKeyAndVisible]; [(UINavigationController *)window.rootViewController pushViewController:viewController animated:NO];`} 

Coloque su default.png en una pantalla completa de UIImageView como una subvista en la parte superior de su vista principal, cubriendo así su otra IU. Configure un temporizador para eliminarlo luego de x segundos (posiblemente con efectos) ahora mostrando su aplicación.

La forma más sencilla de lograr esto es crear un UIImageView con “Default.png” en la parte superior de la primera UIView de ViewController.

Y agregue un temporizador para quitar el UIImageView después de segundos que esperaba.

Esto funciona…

 - (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions { // Load Splash View Controller first self.window = [[UIWindow alloc] initWithFrame:UIScreen.mainScreen.bounds]; UIStoryboard *storyboard = [UIStoryboard storyboardWithName:@"MainStoryboard" bundle:nil]; UIViewController *viewController = [storyboard instantiateViewControllerWithIdentifier:@"Splash"]; self.window.rootViewController = viewController; [self.window makeKeyAndVisible]; // Load other stuff that requires time // Now load the main View Controller that you want } 

La solución más simple aquí es agregar el método sleep() al método didFinishLaunchingWithOptions en su clase AppDelegate .

Swift 4:

 sleep(1) 
  • retrasa LaunchScreen por 1 segundo.

Si quieres hacer algo más elegante, también puedes extender el RunLoop actual con el mismo método:

Swift 4:

 RunLoop.current.run(until: Date(timeIntervalSinceNow: 1)) 

En veloz 4.0
Para el retraso de 1 segundo después del tiempo de inicio predeterminado …

 RunLoop.current.run(until: Date(timeIntervalSinceNow : 1.0)) 

Solo sigue el nombre del proyecto. luego haga clic con el botón derecho / Propiedades / Pestaña Aplicación. Busque “ver eventos de la aplicación” cerca del cuadro combinado del formulario Slash. copie este código en myApplication Class:

  Private Sub MyApplication_Startup(sender As Object, e As StartupEventArgs) Handles Me.Startup System.Threading.Thread.Sleep(3000) ' or other time End Sub 

Puede crear su propia vista y mostrarla cuando se inicie la aplicación y ocultarla con el temporizador. Evita retrasar el inicio de la aplicación porque es una mala idea

Puede especificar el número de segundos para dormir en el método AppDelegate didFinishLaunchingWithOptions.

O alternativamente, use otro ImageView para personalizar la pantalla de presentación.

Ver detalles de este último en el siguiente enlace por mí:

Problema de pantalla de bienvenida