web-dev-qa-db-ja.com

スプラッシュ画面をデフォルトの秒より長く表示する

指定された秒数の間、Default.pngを表示することは可能ですか?現在の時間よりも長くスプラッシュスクリーンを表示したいクライアントがいます。

彼らはそれが2〜3秒間表示されることを望んでいます。

43
fuzz

いいえ、アプリの起動中にdefault.pngが表示されます。

アプリケーションのdidFinishLoadingdefault.pngを表示する新しいViewControllerを追加できます。

この方法では、default.pngをもう少し長く表示します。

データをロードする場合は、default.pngのみを表示する必要があります。これには時間がかかる場合があります。アプリストアのガイドラインに記載されているとおり、必要以上にあなたの開始を遅らせるべきではありません。

58
rckoenes

NSThreadを使用することもできます:

[NSThread sleepForTimeInterval:(NSTimeInterval)];

このコードをapplicationDidFinishLaunchingメソッドの最初の行に配置できます。

たとえば、default.pngを5秒間表示します。

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

これをapplication:didFinishLaunchingWithOptions:に追加します:

迅速:

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

目標C:

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

LaunchScreen.storyboardを使用している場合は、同じView Controllerを取得して表示できます(「LaunchScreen」などのストーリーボードIDを設定することを忘れないでください)

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)
8
Kappe

これは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は最初のアプリですVCロード中です。

5
MB_iOSDeveloper

この tutorial は、スプラッシュスクリーンを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
visakh7

didFinishLaunchingWithOptions:デリゲートメソッドで次の行を使用します。

[NSThread sleepForTimeInterval:5.0];

スプラッシュスクリーンを5.0秒間停止します。

5

Xcode 6.1では、起動画面を遅らせるためのSwift 1.0:

これをdidFinishLaunchingWithOptionsに追加します

NSThread.sleepForTimeInterval(3)

()内の時間は可変です。

新しいSwiftで

Thread.sleep(forTimeInterval:3)
5
Mr. Roddy

In Swift 4.
デフォルトの起動時間から1秒の遅延...

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

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

次のコードを使用できます。

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

これは、指定した時間にスプラッシュコントローラーを提示し、それを削除して通常の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
Ehab Saifan

1.「didFinishLaunchingWithOptions」に別のView Controllerを追加します

 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 Controllerをロードしました

  [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
shweta sharma

sleep(5.0)と書く

- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptionsで5秒間、スプラッシュ画面が表示されます

2
Dhara

これを実現する最も簡単な方法は、最初のView Controller UIImageViewの上に「Default.png」でUIViewを作成することです。

タイマーを追加して、予想した秒後にUIImageViewを削除します。

1
xhan

Default.pngをメインビューの上部のサブビューとしてUIImageView全画面に配置して、他のUIをカバーします。タイマーを設定して、アプリケーションを表示するx秒後に(おそらくエフェクトを使用して)削除します。

1
Tomasz Stanczak

ここでの最も簡単な解決策は、didFinishLaunchingWithOptionsクラスのAppDelegateメソッドにsleep()を追加することです。

Swift 4:

sleep(1)
  • launchScreenを1秒遅らせます。

もっとおしゃれにしたい場合は、同じ方法で現在のRunLoopを拡張することもできます。

Swift 4:

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

これは動作します...

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

In Swift 4.2

デフォルトの起動時間から1秒遅れる場合...

Thread.sleep(forTimeInterval: 1)
0
srsstyle

独自のビューを作成して、アプリケーションの起動時に表示したり、タイマーで非表示にしたりできます。悪い考えとしてアプリの起動を遅らせないでください

0
Umair Khalid

プロジェクト名を入力してください。次に、右クリック/プロパティ/アプリケーションタブ。スラッシュフォームコンボボックスの近くにある「アプリケーションイベントの表示」を見つけます。このコードをmyApplication Classにコピーします:

        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