Отображение заставки дольше, чем по умолчанию - PullRequest
41 голосов
/ 11 апреля 2011

Можно ли отобразить файл Default.png в течение указанного количества секунд?У меня есть клиент, который хочет, чтобы заставка отображалась дольше, чем его текущее время.

Они хотели бы, чтобы он отображался в течение 2 - 3 секунд.

Ответы [ 22 ]

3 голосов
/ 27 ноября 2017

Swift 3

Это можно сделать безопасным способом, представив контроллер-заставку на то время, которое вы укажете, затем удалите его и отобразите свой обычный rootViewController.

  1. Сначала в LaunchingScreen.storyboard назначьте контроллеру идентификатор StoryBoard, скажем, "splashController"
  2. В Main.storyboard присвойте начальному viewController идентификатор StoryBoard, скажем, "initController". -Это может быть навигация или панель вкладок и т. Д. -

В AppDelegate вы можете создать эти 2 метода:

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

Теперь звоните

 self.extendSplashScreenPresentation()

в didFinishLaunchingWithOptions.

Вы готовы идти ...

3 голосов
/ 11 апреля 2011

Вы можете использовать следующий код:

- (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
}
2 голосов
/ 01 июня 2016

1.Добавить еще один контроллер представления в «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.В представлении загрузил контроллер SplashView

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

3.В методе removeSplashScreenAddViewController вы можете добавить свой контроллер основного вида, например, для .-

- (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 голосов
/ 05 апреля 2013

Запись sleep(5.0)

в - (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions в течение 5 секунд будет отображаться заставка

1 голос
/ 14 мая 2018

Самое простое решение - добавить метод sleep() в didFinishLaunchingWithOptions в вашем классе AppDelegate.

Swift 4:

sleep(1)
  • задерживает запуск LaunchScreen на 1 секунду.

Если вы хотите сделать что-то более интересное, выможно также расширить текущий RunLoop тем же способом:

Swift 4:

RunLoop.current.run(until: Date(timeIntervalSinceNow: 1))
1 голос
/ 11 апреля 2011

Поместите файл default.png в полноэкранный режим UIImageView в качестве подпредставления в верхней части основного представления, таким образом охватывая другой пользовательский интерфейс. Установите таймер для его удаления через x секунд (возможно, с эффектами), теперь показывая ваше приложение.

1 голос
/ 11 апреля 2011

Самый простой способ добиться этого - создать UIImageView с «Default.png» в верхней части вашего первого ViewController UIView.

И добавьте таймер для удаления UIImageView через несколько секунд, как вы ожидали.

1 голос
/ 30 декабря 2013

Это работает ...

- (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
}
0 голосов
/ 01 марта 2019

In Swift 4.2

Для задержки 1 секунда после времени запуска по умолчанию ...

Thread.sleep(forTimeInterval: 1)
0 голосов
/ 25 января 2017

Вы можете создать свой собственный вид и отобразить его при запуске приложения и скрыть его с таймером.Пожалуйста, избегайте задержки запуска приложения, так как это плохая идея

...