2012-04-10 4 views
3

Ich habe eine einfache iPhone-Anwendung, die sehr schnell lädt, so dass der Begrüßungsbildschirm nur für einen Bruchteil einer Sekunde angezeigt wird. Gibt es eine Möglichkeit zu steuern, wie lange der Begrüßungsbildschirm angezeigt wird? Ich habe herumgesucht und nichts gefunden, was so aussieht, als würde es funktionieren. Muss ich eine Unteransicht mit meinem Splash-Bild erstellen? Wie würde ich die Anzeigezeit steuern und zwischen der Unteransicht und der Hauptansicht wechseln?Anzeige Splash/Ladebildschirm länger auf iPhone

+3

Wenn Sie die Dauer des Begrüßungsbildschirms verlängern, erhält der Benutzer den Eindruck, dass Ihre App langsam ist und viel Zeit zum Laden benötigt. Das ist das Gegenteil von dem, was du auf einem iPhone haben willst. Wenn deine App langsam ist, werden die Leute es nicht mögen und sie werden es löschen. – EmilioPelaez

+1

Ich verstehe Ihren Standpunkt und es macht Sinn. aber für meinen Fall, ich gebe es nicht an den App Store, es ist für eine Software-Klasse und ich brauche nur meinen Namen und mein Logo, um lange genug zu sehen. Danke – Joey

+0

Es gibt einen guten Blog-Beitrag hier, wie man einen Splash-Screen mit einem 'UIImageView' mit einem Timer erstellt: http://nullpointr.wordpress.com/2012/02/19/iphone-dev-how-to-implement -a-splash-screen/Nützlich für Anfänger, die immer noch den besten Weg lernen, Dinge in iOS zu tun. – asgeo1

Antwort

6

Während ich mit den Ansichten zum Ausdruck gebrachten und in der anderen Frage, warum sollten Sie nicht „missbrauchen“, um den Standard-Bildschirm, es scheint mir ziemlich trivial zu erreichen diesen Effekt einig:

Beim Anfahren, einfach ausgedrückt eine Ansicht, die genau wie der Startbildschirm aussieht und verwenden Sie eine NSTimer, um es zu entlassen. Wirklich ziemlich einfach.

// viewDidLoad 
[self performSelector:@selector(dismiss) 
      withObject:nil 
      afterDelay:yourTimeIntervalInSectons]; 
// dismiss 
[self performSegueWithIdentifier:@"ID" sender:nil]; 

Allerdings muss der Begrüßungsbildschirm nicht jedes Mal aktiviert werden, wenn die Anwendung aktiv wird. Ich habe das einmal für einen sehr spezifischen und nützlichen Zweck im Kontext meiner App getan - aber Apple hat es abgelehnt. Hey, sie haben mich sogar am Samstag Abend angerufen, um es mir zu erklären.

+0

Codebeispiel bitte? – Joey

+8

Ich meine - wie lernst du das Programmieren, wenn du dieses einfache Problem nicht selbst lösen willst? Siehe Code oben, und bitte stimmen Sie ab und kreuzen Sie das Häkchen an. – Mundi

5

Während ich mit allem, was ist schon hier gesagt zustimmen, ich hatte einmal auch einen Begrüßungsbildschirm mit einem Timer zu implementieren, also hier ist der Code:

- (void)showSplashWithDuration:(CGFloat)duration 
{ 
    // add splash screen subview ... 

    UIImage *image   = [UIImage imageNamed:@"Default.png"]; 
    UIImageView *splash  = [[UIImageView alloc] initWithImage:image]; 
    splash.frame   = self.window.bounds; 
    splash.autoresizingMask = UIViewAutoresizingNone; 
    [self.window addSubview:splash]; 


    // block thread, so splash will be displayed for duration ... 

    CGFloat fade_duration = (duration >= 0.5f) ? 0.5f : 0.0f; 
    [NSThread sleepForTimeInterval:duration - fade_duration]; 


    // animate fade out and remove splash from superview ... 

    [UIView animateWithDuration:fade_duration animations:^ { 
     splash.alpha = 0.0f; 
    } completion:^ (BOOL finished) { 
     [splash removeFromSuperview]; 
    }]; 
} 

Rufen Sie einfach die Funktion irgendwo in Ihrer -applicationDidFinishLaunching:withOptions: Methode des AppDelegate


@ asgeo1: Code funktioniert bei mir ganz gut (ich habe in mehreren Projekten ähnlichen Code verwendet wird). Ich habe eine example project auf meiner Dropbox für Ihre Bequemlichkeit hinzugefügt.

+0

Ich glaube nicht, dass das funktioniert. Dies ist nicht anders als nur Schlaf() zu nennen; In meinen Tests konnte ich "Default.png" in ein nicht vorhandenes Bild ändern - "DoesNotExist.png ", und es würde immer noch den 'Splash' Bildschirm für die Dauer zeigen - aber nur, weil es geschlafen hat. Es wird das referenzierte Bild überhaupt nicht rendern. Ich würde diesen Ansatz nicht empfehlen. – asgeo1

+0

@ asgeo1: for your Ich habe ein Beispielprojekt hinzugefügt, damit Sie selbst sehen können, dass der Code einwandfrei funktioniert –

+0

Vielen Dank für das Beispiel, aber ich glaube nicht, dass Sie verstanden haben, was ich gesagt habe Ja - einen Schlaf() Anruf tätigen wird dazu führen, dass das "loading image" (wie im plist angegeben) für eine lange Zeit angezeigt wird. Aber der Rest deines Codes ist redundant. Das Bit dort, das die UIImageView * erstellt, funktioniert nicht. * Glaub mir nicht? Ändern von 'Default.png' in ein anderes Bild Es wird nicht funktionieren - das Standardbild wird angezeigt, da nur iOS das Ladebild von der PLIST (' UILaunchImageName') anzeigt, nicht weil Sie dem Fenster eine UIImageView hinzugefügt haben ! – asgeo1

3

Jetzt stimme ich völlig mit den oben genannten Posts überein, dass Sie dies nicht tun sollten, aber wenn Sie immer noch wünschen, kann sehr leicht erreicht werden, indem Sie das folgende zu Ihrem AppDelegate.m hinzufügen.

Die "2" gibt an, wie viele Sekunden für den Schlaf benötigt werden. Werte wie ".5" werden akzeptiert.

+0

Nein funktioniert für mich, wie es gibt ein Leerzeichen beim Übergang von der Ansicht zur anderen –