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.
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.
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];
}
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]];
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)
}
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.
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];
}
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.
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))
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.
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()
}
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
}
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.
Dans AppDelegate, vous pouvez créer ces 2 méthodes:
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 ...
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];`}
Écrivez sleep(5.0)
dans - (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions
pendant 5 secondes, l'écran de démarrage s'affiche
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.
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.
La solution la plus simple consiste à ajouter sleep()
à la méthode didFinishLaunchingWithOptions
dans votre classe AppDelegate
.
Swift 4:
sleep(1)
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))
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
}
Dans Swift 4.2
Pour retarder 1 seconde après l'heure de lancement par défaut ...
Thread.sleep(forTimeInterval: 1)
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
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