2015-06-29 5 views
0

В моем приложении iPhone необходимо отобразить заставку (отображает логотип компании и некоторую информацию) за 2-3 секунды перед загрузкой первой страницы.iOS Swift splash screen из раскадровки

Также приложение должно решить, какая страница должна загружаться в качестве первой страницы здесь (в соответствии с уровнем начальной настройки завершения).

Я использую «Swift», как язык программирования и «Универсальный раскадровке» для разработки интерфейсов ...

Я seleted в Main.storyboard как Launch Screen File. В классе ViewController реализовали следуя логике

override func viewDidAppear(animated: Bool) { 
    NSLog("Before sleep...") 
    sleep(2) 
    NSLog("After sleep...") 

    self.controllNavigation() 
} 

func controllNavigation() -> Void { 

    let storyBoard : UIStoryboard = UIStoryboard(name: "Main", bundle: nil) 

    var nextViewController 

    if (Condition1) 
    { 
     nextViewController = storyBoard.instantiateViewControllerWithIdentifier("MainMenu") as! MainMenuViewController 
    } 
    else 
    { 
     nextViewController = storyBoard.instantiateViewControllerWithIdentifier("UserSetup") as! UserSetupViewController 
    } 

    self.presentViewController(nextViewController, animated: true, completion: nil) 

} 

Все работает нормально, но время ожидания с sleep(2), обновите страницу своего рода вещь. Я не уверен, что это лучший способ сделать. Словно слышать идеи. Спасибо

+0

Вы не являетесь пользователем угодника вы ... 2-3 секунды пауза? Просто позвольте пользователю! Или вы отправитесь в 1 звезда отзывов. Пользователи не хотят смотреть на логотип вашей компании или информацию в любое время, они, по-видимому, хотят использовать ваше приложение. – Daniel

+0

привет Даниэль, да, я это понимаю. Но это требование клиента. Их приложения Android и Windows делают это. Нужна такая же функциональность в приложении IOS. – JibW

+0

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

ответ

1

Использовать задержку в приложении делегата вместо viewController viewDidAppear. Использования в качестве:

func application(application: UIApplication, didFinishLaunchingWithOptions launchOptions: [NSObject: AnyObject]?) -> Bool { 
    NSLog("Before Sleep"); 
    sleep(2); 
    NSLog("After sleep"); 
    return true 
} 

подав экран выплеска остаться до 2-х секунд, а затем вы можете использовать следующий в контроллере представления:

override func viewDidAppear(animated: Bool) { 
    self.controllNavigation() 
} 

Надеется, что это помогает :)

+3

не использовать сон (3), он замораживает основную нить. используйте 'performSelector: afterDelay:' –

+0

Да @KostiantynKoval, он хочет оставаться на экране запуска до 2 секунд, поэтому ему нужно заморозить основную нить. Он не может использовать селектор выполнения, потому что он будет принимать его прямо на ViewController. –

+0

Конечно, есть правильные способы сделать это, например. вы можете создать UIViewController, чтобы отобразить экран запуска, и оттуда вы можете нажать на свой просмотр viewController через 2 секунды, но использование сна будет работать без дополнительных накладных расходов. –

2

Я столкнулся с подобными ответами, в которых упоминалось sleep(), однако, похоже, он не подходит для использования, поскольку он блокирует основной поток.

Я пришел с этим решением, если вы используете LaunchScreen.storyboard по умолчанию в Xcode 7.2:

func showLaunchScreen() { 
    let launchScreen = UIStoryboard(name: "LaunchScreen", bundle: nil) 
    let launchView = launchScreen.instantiateInitialViewController() 
    self.view.addSubview(launchView!.view) 

    let timeDelay = dispatch_time(DISPATCH_TIME_NOW, Int64(2 * Double(NSEC_PER_SEC))) 
    dispatch_after(timeDelay, dispatch_get_main_queue()) { 
     UIView.animateWithDuration(0.5, animations: { _ in 
      launchView?.view.alpha = 0.0 
      }) { _ in 
       launchView!.view.removeFromSuperview() 
     } 
    } 

Это покажет экран запуска еще на 2 секунды, а затем исчезает его в течение 0,5 секунды. Вы можете вызвать другую функцию для загрузки VC по умолчанию в обработчик завершения.

0

Я решил эту проблему с этим:

На моем проекте я установить желаемую раскадровку всплеска (в моем случае Splash.storyboard) в качестве экрана по умолчанию -> Цель/(ваша целевой)/Информация/Запуск экрана Имя базового файла интерфейса.

Field on Project Settings

Когда вы сделаете это, вы можете вставить свою логику по методу "Func применения (_ применения: UIApplication, didFinishLaunchingWithOptions launchOptions: [UIApplicationLaunchOptionsKey: Любые]?) -> Bool {}" размещены на AppDelegate.swift.

Если вы хотите сделать чистый код, вы можете вставить все связанные с ним методы навигации в другой класс и вызвать их из AppDelegate.swift.

С помощью этого решения всплеск отображается только на требуемое время, и когда он заканчивается, вы можете перейти к нужному экрану.

0

Swift 4 Update 100% рабочий

Просто написать одну строку кода Thread.sleep(forTimeInterval: 3.0) в методе didfinishLauching.... в appdelegate классе.

Пример

func application(_ application: UIApplication, didFinishLaunchingWithOptions launchOptions: [UIApplicationLaunchOptionsKey: Any]?) -> Bool { 
    Thread.sleep(forTimeInterval: 3.0) 
    // Override point for customization after application launch. 
    return true 
}