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

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

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

Ответы [ 22 ]

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

Нет, default.png отображается при запуске приложения.

Вы можете добавить новый viewcontroller, который будет отображать default.png в приложении didFinishLoading.

Таким образом, вы отображаете default.png немного дольше.

Показывать default.png следует только в том случае, если вы загружаете данные, что может занять некоторое время. Как говорится в рекомендациях AppStore, вы не должны откладывать запуск программы дольше, чем это необходимо.

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

Вы также можете использовать NSThread:

[NSThread sleepForTimeInterval:(NSTimeInterval)];

Вы можете поместить этот код в первую строку метода applicationDidFinishLaunching.

Например, отображать default.png в течение 5 секунд.

- (void) applicationDidFinishLaunching:(UIApplication*)application
{
   [NSThread sleepForTimeInterval:5.0];
}
16 голосов
/ 29 мая 2016

Добавьте это к вашему application:didFinishLaunchingWithOptions::

Swift:

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

Цель C:

// Delay 1 second
[[NSRunLoop currentRunLoop]runUntilDate:[NSDate dateWithTimeIntervalSinceNow: 1.0]];
7 голосов
/ 22 января 2016

Если вы используете LaunchScreen.storyboard, вы можете получить тот же контроллер представления и представить его: (не забудьте установить идентификатор раскадровки, например, «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)
        }

SWIFT 4

let storyboard = UIStoryboard(name: "LaunchScreen", bundle: nil)
let vc = storyboard.instantiateViewController(withIdentifier: "LaunchScreen")
 self.window!.rootViewController!.present(vc, animated: false, completion: nil)
5 голосов
/ 11 апреля 2011

Этот учебник отображает заставку в течение 2 секунд. Вы можете легко изменить его в соответствии с вашими потребностями.

- (void)showSplash {
  UIViewController *modalViewController = [[UIViewController alloc] init];
  modalViewController.view = modelView;
  [self presentModalViewController:modalViewController animated:NO];
  [self performSelector:@selector(hideSplash) withObject:nil afterDelay:yourDelay];
}
5 голосов
/ 15 мая 2015

Это сработало для меня в 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 - первый загружаемый виртуальный канал приложения.

5 голосов
/ 25 февраля 2015

В Xcode 6.1, Swift 1.0 для задержки запуска экрана:

Добавьте это к didFinishLaunchingWithOptions

NSThread.sleepForTimeInterval(3)

время в () является переменным.

В новом swift

Thread.sleep(forTimeInterval:3)
5 голосов
/ 29 апреля 2013

Использовать следующую строку в didFinishLaunchingWithOptions: метод делегата:

[NSThread sleepForTimeInterval:5.0];

Это остановит экран-заставку на 5,0 секунд.

4 голосов
/ 30 мая 2018

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

RunLoop.current.run(until: Date(timeIntervalSinceNow : 1.0))
4 голосов
/ 08 марта 2016

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) Использование концепции контроллера корневого представления:

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