IPhoneでデフォルトの時間よりも長い時間、スプラッシュスクリーンを表示するにはどうすればよいですか?
Apple iPhone Human Interface Guidelines(HIG)をお読みください。「スプラッシュ画面」は、ブランドの設定やロゴの表示用ではなく、アプリのデフォルトの状態のように見えるはずです。すぐに起動するようです。
それをより長くそこにとどめることは、HIGの違反になります。
これを行う最も簡単な方法は、画像がDefault.pngであるUIImageViewを作成することです。 applicationDidFinishLaunching:メソッドで、その画像ビューをウィンドウに追加し、スプラッシュスクリーンを消したいときに非表示にします。
ネットワークを介してデータがロードされるまで、テーブルビューの表示をブロックするためにこれを行う必要がありました。ここで見つけたもののバリエーションを使用しました:
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があることを確認してください
appDelegateには、applicationDidFinishedLaunchingというメソッドがあり、スリープ機能を使用します。 noのスリープ機能に数字を渡します。画面を保持する秒数。
- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions
{
[window makeKeyAndVisible];
[window addSubview:viewController.view];
sleep(5);
return YES;
}
私はこのことをとても探して、誰もが自分の複雑な視点を与えました。私にそれをさせるだけの簡単な方法は見つかりませんでした。
KISS(シンプルでスマートに保つ:)実際の攻撃は避けた。
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に違反するとは思わず、実際にはより高速な起動を可能にします。あなたはむしろ、かわいい絵、または空のデフォルトのビュー(いびき)を見ますか?
それはガイドラインに反していますが、まだこれを行いたい場合は、スレッドをスリープするよりも良いアプローチよりも
//Extend the splash screen for 3 seconds.
[[NSRunLoop currentRunLoop] runUntilDate:[NSDate dateWithTimeIntervalSinceNow:3]];
このように、メインスレッドはブロックされず、通知やその他のネットワーク関連のものをリッスンしている場合、引き続き実行されます。
Swiftの更新:
NSRunLoop.currentRunLoop().runUntilDate(NSDate(timeIntervalSinceNow:3))
はい、最も簡単な方法は(「default.png」をターゲットに追加することを忘れないでください-> [yourProjectName]:「xCode」で画像を起動します):
- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions
{
[NSThread sleepForTimeInterval:3.0];
}
単にsleep(秒単位の時間)を使用します。 applicationDidFinishedLaunchingメソッドで
アプリの読み込みに時間がかかるようにします。
すべての深刻さにおいて、Paul Tomblinは、これは通常、良いアイデアではないということを正しいと思っています。 Default.pngは、「空の」スクリーンショットを保持することで、アプリの読み込みを高速化するためのメカニズムです。スプラッシュスクリーンに使用することは軽度の不正行為ですが、意図的にそのスプラッシュスクリーンを必要以上に長く表示することはほとんど病気です。 (また、ユーザーエクスペリエンスが低下します。スプラッシュスクリーンが表示される1秒ごとに、ユーザーが自分のロゴを焦りながら見つめ、見つけられる最初の適切な競合他社に切り替えることを誓います。)
何らかの二次的な負荷をカバーしようとしている場合-たとえば、インターフェイスがロードされ、ネットワークからデータを取得するのを待っている場合-それはおそらく大丈夫であり、Ben Gottliebのアプローチは問題ありません。進行状況バーまたはスピナーを追加して、実際に何かが進行中であることをユーザーに明確にすることをお勧めします。
これが私の簡単なスプラッシュスクリーンコードです。 「splashView」は、画像ロゴ、UIActivityIndicator、および「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];
}
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)
}
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
私はこれを以下のように行いました:
UIStoryboard *storyboard = [UIStoryboard storyboardWithName:@"LaunchScreen" bundle:nil];
UIViewController *viewController = [storyboard instantiateViewControllerWithIdentifier:@"splashView"];
self.window.rootViewController = viewController;
注:LaunchScreenは起動ストーリーboradであり、splashViewはstoryboardIdentifierです
Apple HIGによると、これを行うべきではありません。しかし、アプリケーションが明確な目的でそうする必要がある場合は、以下を行うことができます。
「application didFinishLaunchingWithOptions:」メソッドの最初に次の行を記述します。
sleep(//your time in sec goes here//)
;
実際のスプラッシュスクリーンクラスを記述します。
IPhoneのActionブログに最近投稿した、自由に使用できるスプラッシュスクリーンを次に示します。 http://iphoneinaction.manning.com/iphone_in_action/2009/03/creating-a-splash-screen-part-one.html
applicationDidFininshLaunchingsメソッドでウィンドウを数秒間スリープさせるだけです
例:sleep(3)
最も簡単な方法は、アプリケーションのメインスレッドを目的の期間スリープモードにすることです。 「Default.png」がアプリケーションのバンドルに存在する場合、メインスレッドがスリープしている限り表示されます。
-(void)applicationDidFinishLaunching:(UIApplication *)application {
[NSThread sleepForTimeInterval:5];
window = [[UIWindow alloc] initWithFrame:[UIScreen mainScreen].bounds];
[window setBackgroundColor:[UIColor yellowColor]];
[window makeKeyAndVisible];
}
既にご存知のように、それは恐ろしく悪い考えですが、うまく機能するはずです...
アプリを起動すると、デフォルトの画像(default.png)が表示されます。
そのため、アプリケーションのdidFinishLoadingにそのデフォルト画像を表示する新しいViewControllerを追加できます。
したがって、このロジックを使用すると、デフォルトの画像が少し長く表示されます。
特にWebサイトからデータを取得する必要がある場合は、アプリの起動時にスプラッシュスクリーンを使用するのが理にかなっていることに同意します。
Apple HIG-(MobileMe)iDiskアプリを見てください。メンバーの詳細を登録するまで、アプリは非常にすばやくフルスクリーンビューを表示する前に典型的なuitableview Default.pngを表示します。
ここにはすでに多くのオプションが投稿されていますが、今日はココアポッドに遭遇しました。これにより、LaunchScreen.xib
最初のView Controllerとして:
https://github.com/granoff/LaunchScreen (これも参照してください 実装の詳細が記載された著者のブログ投稿 。)
これは、これを行うためのかなり簡単な方法のようであり、ここに投稿された回答の大部分よりも優れています。 (もちろん、最初にLaunchScreen
ファイルを導入するまでは不可能でした。)ビューの上にアクティビティインジケーター(または他の必要なもの)を表示することができます。
これを行う理由については、この種のことに関して出版社やパートナーの要件が頻繁に存在することを誰も言及していないことに驚いています。ゲームでは非常に一般的ですが、広告資金によるアプリケーションも同様です。
また、これはHIGに反する機能を果たしますが、アプリケーションの起動後にコンテンツのロードを待機することにも注意してください。 HIGはガイドラインであり、要件ではないことに注意してください。
最後の注意点:個人的な意見ですが、このような初期画面が実装されたときはいつでもタップして閉じることができるはずです。
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()
}
}
Swiftバージョン:
この行をAppDelegateに追加します
func application(application: UIApplication, didFinishLaunchingWithOptions launchOptions: [NSObject: AnyObject]?) -> Bool {
NSThread.sleepForTimeInterval(2.0)//in seconds
return true
}
私がやったことは、初期画面でモーダルビューコントローラーを提示し、数秒後にそれを却下することです
- (void)viewDidLoad
{
[super viewDidLoad];
....
saSplash = [storyboard instantiateViewControllerWithIdentifier:@"SASplashViewController"];
saSplash.modalPresentationStyle = UIModalPresentationFullScreen;
[self presentModalViewController: saSplash animated:NO];
}
-(void) dismissSASplash {
[saSplash dismissModalViewControllerAnimated:NO];
}
スタイリッシュなスプラッシュスクリーンのチュートリアルについては、こちらをご覧ください http://adeem.me/blog/2009/06/22/creating-splash-screen-tutorial-for-iphone/