web-dev-qa-db-ja.com

iPhoneでスプラッシュスクリーンをより長く表示するにはどうすればよいですか?

IPhoneでデフォルトの時間よりも長い時間、スプラッシュスクリーンを表示するにはどうすればよいですか?

49
Shofiur

Apple iPhone Human Interface Guidelines(HIG)をお読みください。「スプラッシュ画面」は、ブランドの設定やロゴの表示用ではなく、アプリのデフォルトの状態のように見えるはずです。すぐに起動するようです。

それをより長くそこにとどめることは、HIGの違反になります。

39
Paul Tomblin

これを行う最も簡単な方法は、画像がDefault.pngであるUIImageViewを作成することです。 applicationDidFinishLaunching:メソッドで、その画像ビューをウィンドウに追加し、スプラッシュスクリーンを消したいときに非表示にします。

26
Ben Gottlieb

ネットワークを介してデータがロードされるまで、テーブルビューの表示をブロックするためにこれを行う必要がありました。ここで見つけたもののバリエーションを使用しました:

http://michael.burford.net/2008/11/fading-defaultpng-when-iphone-app.html

アプリデリゲートのインターフェイスで:


@interface AppDelegate : NSObject 
{
  UIImageView *splashView;
}

実装では:


@implementation AppDelegate
- (void)applicationDidFinishLaunching:(UIApplication *)application {


  // After this line: [window addSubview:tabBarController.view];

  splashView = [[UIImageView alloc] initWithFrame:CGRectMake(0, 0, 320, 480)];
  splashView.image = [UIImage imageNamed:@"Default.png"];
  [window addSubview:splashView];
  [window bringSubviewToFront:splashView];

  // Do your time consuming setup

  [splashView removeFromSuperview];
  [splashView release];
}

リソースにDefault.pngがあることを確認してください

21
nevan king

appDelegateには、applicationDidFinishedLaunchingというメソッドがあり、スリープ機能を使用します。 noのスリープ機能に数字を渡します。画面を保持する秒数。


- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions 
{    
    [window makeKeyAndVisible];
    [window addSubview:viewController.view];
    sleep(5);
    return YES;
}

私はこのことをとても探して、誰もが自分の複雑な視点を与えました。私にそれをさせるだけの簡単な方法は見つかりませんでした。

KISS(シンプルでスマートに保つ:)実際の攻撃は避けた。

18
Taimur Ajmal

RootViewControllerにmodalViewControllerをプッシュさせ、「SplashViewController」と呼ばれるUIViewControllerのサブクラスの「Splash.nib」からロードすることで、非常に簡単にできました。正確な呼び出しは次のとおりです。

- (void) viewDidLoad {
SplashViewController *splashScreen = [[[SplashViewController alloc]    
        initWithNibName:@"SplashViewController" bundle:nil] autorelease];
[self presentModalViewController:splashScreen animated:NO];
//continue loading while MVC is over top...

アプリを起動すると、スプラッシュ画面のようにポップアップします。次に、SplashViewControllerペン先は、スプラッシュpng、320x480を備えたフルスクリーンUIImageViewです。 NSTimerが1秒経過すると(それ以上のものが邪魔になったように見えます)、timerFireMethodを起動します。

[self dismissModalViewControllerAnimated:YES];

その後、モーダルVCだけスライドして、トップのtableViewを残します。MVCが起動している間、基礎となるテーブル ロードし続けることができます モーダルビューコントローラーの独立した性質のため。だから、これはHIGに違反するとは思わず、実際にはより高速な起動を可能にします。あなたはむしろ、かわいい絵、または空のデフォルトのビュー(いびき)を見ますか?

14
jimiHendrix

それはガイドラインに反していますが、まだこれを行いたい場合は、スレッドをスリープするよりも良いアプローチよりも

//Extend the splash screen for 3 seconds.
[[NSRunLoop currentRunLoop] runUntilDate:[NSDate dateWithTimeIntervalSinceNow:3]];

このように、メインスレッドはブロックされず、通知やその他のネットワーク関連のものをリッスンしている場合、引き続き実行されます。

Swiftの更新:

 NSRunLoop.currentRunLoop().runUntilDate(NSDate(timeIntervalSinceNow:3))
14

はい、最も簡単な方法は(「default.png」をターゲットに追加することを忘れないでください-> [yourProjectName]:「xCode」で画像を起動します):

- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions
{
    [NSThread sleepForTimeInterval:3.0];
}
11

単にsleep(秒単位の時間)を使用します。 applicationDidFinishedLaunchingメソッドで

3
Rahul Vyas

アプリの読み込みに時間がかかるようにします。

すべての深刻さにおいて、Paul Tomblinは、これは通常、良いアイデアではないということを正しいと思っています。 Default.pngは、「空の」スクリーンショットを保持することで、アプリの読み込みを高速化するためのメカニズムです。スプラッシュスクリーンに使用することは軽度の不正行為ですが、意図的にそのスプラッシュスクリーンを必要以上に長く表示することはほとんど病気です。 (また、ユーザーエクスペリエンスが低下します。スプラッシュスクリーンが表示される1秒ごとに、ユーザーが自分のロゴを焦りながら見つめ、見つけられる最初の適切な競合他社に切り替えることを誓います。)

何らかの二次的な負荷をカバーしようとしている場合-たとえば、インターフェイスがロードされ、ネットワークからデータを取得するのを待っている場合-それはおそらく大丈夫であり、Ben Gottliebのアプローチは問題ありません。進行状況バーまたはスピナーを追加して、実際に何かが進行中であることをユーザーに明確にすることをお勧めします。

3

これが私の簡単なスプラッシュスクリーンコードです。 「splashView」は、画像ロゴ、UIActivityIndi​​cator、および「Load ..」ラベル(IBの「MainWIndow.xib」に追加)を含むビューのアウトレットです。アクティビティインジケータはIBで「アニメーション化」に設定されているため、データをロードするために別のスレッドを生成します。完了したら、splashViewを削除して、通常のアプリケーションビューを追加します。

-(void)applicationDidFinishLaunching:(UIApplication *)application {
    [window addSubview:splashView];
    [NSThread detachNewThreadSelector:@selector(getInitialData:) 
                                 toTarget:self withObject:nil];
}

-(void)getInitialData:(id)obj {
    [NSThread sleepForTimeInterval:3.0]; // simulate waiting for server response
    [splashView removeFromSuperview];
    [window addSubview:tabBarController.view];
}
2
wcochran

Xcode 6。それ :-)

    func showLaunchScreen() {
    // show launchscreen
    launchView = NSBundle.mainBundle().loadNibNamed("LaunchScreen", owner: self, options: nil)[0] as! UIView
    launchView.frame = self.view.bounds;
    self.view.addSubview(launchView)

    // show indicator
    launchScreenIndicator = UIActivityIndicatorView(frame: CGRectMake(0, 0, 50, 50)) as UIActivityIndicatorView
    launchScreenIndicator.center = CGPointMake(self.view.center.x, self.view.center.y+100)
    launchScreenIndicator.hidesWhenStopped = true
    launchScreenIndicator.activityIndicatorViewStyle = UIActivityIndicatorViewStyle.Gray
    launchView.addSubview(launchScreenIndicator)
    self.view.addSubview(launchView)
    launchScreenIndicator.startAnimating()

    self.navigationController?.setNavigationBarHidden(self.navigationController?.navigationBarHidden == false, animated: true) //or animated: false
}

func removeLaunchScreen() {
    println("remove launchscreen")
    self.launchView.removeFromSuperview()
    self.launchScreenIndicator.stopAnimating()
    self.navigationController?.setNavigationBarHidden(false, animated: true)
}
2
ddnl
 Inside your AppDelegate.m

    - (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions
    {
        // Sleep is code to stop the slash screen for 5MoreSeconds
        sleep(5);

        [self initializeStoryBoardBasedOnScreenSize];
        return YES;
    }

// VKJ

2
Vinod Joshi

私はこれを以下のように行いました:

UIStoryboard *storyboard = [UIStoryboard storyboardWithName:@"LaunchScreen" bundle:nil];
    UIViewController *viewController = [storyboard instantiateViewControllerWithIdentifier:@"splashView"];
    self.window.rootViewController = viewController;

注:LaunchScreenは起動ストーリーboradであり、splashViewはstoryboardIdentifierです

1
sagaya martin

Apple HIGによると、これを行うべきではありません。しかし、アプリケーションが明確な目的でそうする必要がある場合は、以下を行うことができます。

  • appDelegate.mの<unistd.h>をインポートします
  • 「application didFinishLaunchingWithOptions:」メソッドの最初に次の行を記述します。

    sleep(//your time in sec goes here//);

1
x4h1d

実際のスプラッシュスクリーンクラスを記述します。

IPhoneのActionブログに最近投稿した、自由に使用できるスプラッシュスクリーンを次に示します。 http://iphoneinaction.manning.com/iphone_in_action/2009/03/creating-a-splash-screen-part-one.html

1
Shannon A.

applicationDidFininshLaunchingsメソッドでウィンドウを数秒間スリープさせるだけです

例:sleep(3)

1
vshall

最も簡単な方法は、アプリケーションのメインスレッドを目的の期間スリープモードにすることです。 「Default.png」がアプリケーションのバンドルに存在する場合、メインスレッドがスリープしている限り表示されます。


-(void)applicationDidFinishLaunching:(UIApplication *)application {
    [NSThread sleepForTimeInterval:5];
    window = [[UIWindow alloc] initWithFrame:[UIScreen mainScreen].bounds]; 
    [window setBackgroundColor:[UIColor yellowColor]];
    [window makeKeyAndVisible];
}

既にご存知のように、それは恐ろしく悪い考えですが、うまく機能するはずです...

1
Mysliwy

アプリを起動すると、デフォルトの画像(default.png)が表示されます。

そのため、アプリケーションのdidFinishLoadingにそのデフォルト画像を表示する新しいViewControllerを追加できます。

したがって、このロジックを使用すると、デフォルトの画像が少し長く表示されます。

0
hites

特にWebサイトからデータを取得する必要がある場合は、アプリの起動時にスプラッシュスクリーンを使用するのが理にかなっていることに同意します。

Apple HIG-(MobileMe)iDiskアプリを見てください。メンバーの詳細を登録するまで、アプリは非常にすばやくフルスクリーンビューを表示する前に典型的なuitableview Default.pngを表示します。

0
petert

ここにはすでに多くのオプションが投稿されていますが、今日はココアポッドに遭遇しました。これにより、LaunchScreen.xib最初のView Controllerとして:

https://github.com/granoff/LaunchScreen (これも参照してください 実装の詳細が記載された著者のブログ投稿 。)

これは、これを行うためのかなり簡単な方法のようであり、ここに投稿された回答の大部分よりも優れています。 (もちろん、最初にLaunchScreenファイルを導入するまでは不可能でした。)ビューの上にアクティビティインジケーター(または他の必要なもの)を表示することができます。

これを行う理由については、この種のことに関して出版社やパートナーの要件が頻繁に存在することを誰も言及していないことに驚いています。ゲームでは非常に一般的ですが、広告資金によるアプリケーションも同様です。

また、これはHIGに反する機能を果たしますが、アプリケーションの起動後にコンテンツのロードを待機することにも注意してください。 HIGはガイドラインであり、要件ではないことに注意してください。

最後の注意点:個人的な意見ですが、このような初期画面が実装されたときはいつでもタップして閉じることができるはずです。

0
livingtech

Swift 2.

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

func application(application: UIApplication, didFinishLaunchingWithOptions launchOptions: [NSObject: AnyObject]?) -> Bool {
    NSThread.sleepForTimeInterval(5.0)
    return true
}

ただし、これをお勧めします:

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

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: "Logo.png")
            self.view.addSubview(self.splashScreen)

            var removeSplashScreen = NSTimer.scheduledTimerWithTimeInterval(3.0, target: self, selector: "removeSplashImage", userInfo: nil, repeats: false)
        }
        func removeSplashImage()
        { 
            self.splashScreen.removeFromSuperview()
        }
    }
0
A.G

Swiftバージョン:

この行をAppDelegateに追加します

func application(application: UIApplication, didFinishLaunchingWithOptions launchOptions: [NSObject: AnyObject]?) -> Bool {

    NSThread.sleepForTimeInterval(2.0)//in seconds

    return true
}
0
stan

私がやったことは、初期画面でモーダルビューコントローラーを提示し、数秒後にそれを却下することです

    - (void)viewDidLoad
{
    [super viewDidLoad];
    ....
  saSplash = [storyboard instantiateViewControllerWithIdentifier:@"SASplashViewController"];
    saSplash.modalPresentationStyle = UIModalPresentationFullScreen;
    [self presentModalViewController: saSplash animated:NO];
}

-(void) dismissSASplash {
    [saSplash dismissModalViewControllerAnimated:NO];

}
0
ZiggyZag

スタイリッシュなスプラッシュスクリーンのチュートリアルについては、こちらをご覧ください http://adeem.me/blog/2009/06/22/creating-splash-screen-tutorial-for-iphone/