web-dev-qa-db-fra.com

Affichage de l'écran de démarrage pendant plus de secondes par défaut

Est-il possible d'afficher le fichier Default.png pendant un nombre de secondes spécifié? J'ai un client qui souhaite que l'écran de démarrage soit affiché plus longtemps que l'heure actuelle.

Ils voudraient qu'il soit affiché pendant 2 à 3 secondes.

37
fuzz

Non, le default.png est affiché au démarrage de votre application.

Vous pouvez ajouter un nouveau contrôleur de vue qui affichera le default.png dans l'application didFinishLoading.

De cette façon, vous affichez le default.png un peu plus longtemps.

Vous ne devez afficher le default.png que si vous chargez des données, ce qui peut prendre un certain temps . Comme indiqué dans les instructions relatives à l’appstore, vous ne devez pas attendre plus longtemps que prévu. 

56
rckoenes

Vous pouvez également utiliser NSThread:

[NSThread sleepForTimeInterval:(NSTimeInterval)];

Vous pouvez mettre ce code dans la première ligne de la méthode applicationDidFinishLaunching.

Par exemple, affichez default.png pendant 5 secondes.

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

Ajoutez ceci à votre application:didFinishLaunchingWithOptions::

Rapide:

// Delay 1 second
RunLoop.current.run(until: Date(timeIntervalSinceNow: 1.0))

Objectif c:

// Delay 1 second
[[NSRunLoop currentRunLoop]runUntilDate:[NSDate dateWithTimeIntervalSinceNow: 1.0]];
14
Daniel Storm

Si vous utilisez LaunchScreen.storyboard, vous pouvez obtenir le même contrôleur de vue et le présenter: (n'oubliez pas de définir l'ID du storyboard, par exemple "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)
        }
7
Kappe

Cela a fonctionné pour moi dans 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 est la première application VC en cours de chargement.

5
MB_iOSDeveloper

Ce tutorial affiche un écran de démarrage pendant 2 secondes. Vous pouvez facilement le changer pour répondre à vos besoins.

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

Utilisez la ligne suivante dans la méthode déléguée didFinishLaunchingWithOptions::

[NSThread sleepForTimeInterval:5.0];

Il arrêtera l'écran de démarrage pendant 5,0 secondes.

5
Himanshu Mahajan

Dans Swift 4.0
Pour un délai d'une seconde après l'heure de lancement par défaut ...

RunLoop.current.run(until: Date(timeIntervalSinceNow : 1.0))
4
Hardik Trivedi

Dans Xcode 6.1, Swift 1.0 pour retarder l’écran de lancement:

Ajoutez ceci à la didFinishLaunchingWithOptions

NSThread.sleepForTimeInterval(3)

le temps dans le () est variable.

4
Mr. Roddy

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) Utilisation du concept de contrôleur de vue racine:

//  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()
 }
4
A.G

Vous pouvez utiliser le code suivant:

- (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
}
3
Ravin

Swift 3

Ceci est faisable de manière sûre en présentant le contrôleur de démarrage pour le temps que vous spécifiez, puis supprimez-le et affichez votre rootViewController normal.

  1. Tout d’abord dans LaunchingScreen.storyboard, attribuez à votre contrôleur un identifiant StoryBoard, par exemple "splashController".
  2. Dans Main.storyboard, attribuez à votre viewController initial un identifiant StoryBoard, par exemple "initController". -Cela pourrait être nav ou barre d'onglets etc ...-

Dans AppDelegate, vous pouvez créer ces 2 méthodes:

  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()
}

Maintenant tu appelles 

 self.extendSplashScreenPresentation()

dans didFinishLaunchingWithOptions.

Vous êtes prêt à partir ...

3
Ehab Saifan

1.Ajouter un autre contrôleur de vue dans «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.En vue, chargement de SplashView Controller

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

3.Dans la méthode removeSplashScreenAddViewController, vous pouvez ajouter votre contrôleur de vue principal, par exemple.

- (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];`}
2
shweta sharma

Écrivez sleep(5.0) 

dans - (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions pendant 5 secondes, l'écran de démarrage s'affiche

2
Dhara

Le moyen le plus simple d'y parvenir est de créer une UIImageView avec "Default.png" en haut de votre première variable UIView de ViewController. 

Et ajoutez un minuteur pour supprimer la UIImageView après le nombre de secondes attendu.

1
xhan

Placez votre default.png dans un écran plein UIImageView en tant que sous-vue en haut de votre vue principale, couvrant ainsi votre autre interface utilisateur. Définissez une minuterie pour la supprimer après x secondes (éventuellement avec des effets) affichant maintenant votre application.

1
Tomasz Stanczak

La solution la plus simple consiste à ajouter sleep() à la méthode didFinishLaunchingWithOptions dans votre classe AppDelegate

Swift 4:

sleep(1)
  • retarde le LaunchScreen de 1 seconde.

Si vous voulez faire quelque chose de plus sophistiqué, vous pouvez également étendre le RunLoop actuel de la même manière:

Swift 4:

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

Cela marche...

- (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
}
1
Euwing Tham

Dans Swift 4.2

Pour retarder 1 seconde après l'heure de lancement par défaut ...

Thread.sleep(forTimeInterval: 1)
0
srsstyle

Vous pouvez créer votre propre vue et l'afficher au démarrage de l'application et la masquer avec une minuterie. S'il vous plaît éviter de retarder le démarrage de l'application, car c'est une mauvaise idée 

0
Umair Khalid

Il suffit d'aller sur le nom du projet. puis Clic droit/propriétés/onglet Application . Recherchez "afficher les événements d'application" près de la liste déroulante de formulaire Slash . copiez ce code dans myApplication

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