18

Hallo, ich habe eine app, und ich habe zwei * .pngs für Standard-Splash-Screen:Wie erkenne ich die Ausrichtung beim App-Start für Splash-Screen-Animation auf dem iPad?

Standard-Landscape.png Standard-Portrait.png

Was ich will, ist diesen Standard Splash-Screen weg zu animieren, wenn Meine App ist geladen und bereit zu gehen.

Um dies zu erreichen, würde ich normalerweise ein UIImageView entweder mit Standard-Querformat oder Standard-Hochformat (abhängig von der Ausrichtung des Geräts) anzeigen, für eine bestimmte Zeit auf dem Bildschirm halten und dann animieren.

Mein Problem ist, dass, wenn ich [[UIDevice currentDevice] orientation] in

- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions {  

rufe Die Antwort ist immer, dass das Gerät im Hochformat ist, auch wenn ich es deutlich in der Landschaft. Ich habe das im Simulator und am Gerät ausprobiert und das Verhalten ist das gleiche.

Kennt jemand eine Lösung für diesen oder vielleicht einen anderen Ansatz?

Danke!

+0

Sie eine Lösung für diese gefunden? – bzlm

+0

@Horatiu Paraschiv Ich habe dieses Problem auch. Können Sie mir bitte helfen, die Lösung zu finden? –

Antwort

1

Vielleicht könnten Sie eine leere Ansicht mit schwarzem Hintergrund zur Startzeit anzeigen und [[UIDevice currentDevice] orientation] in diese Ansicht viewDidAppear platzieren und von dort aus Ihren Begrüßungsbildschirm starten?

+1

Das würde funktionieren und tun, was Sie wollten, aber es verstößt gegen die Richtlinien in der iOS HIG - das Startbild ist nicht als Begrüßungsbildschirm gedacht und iOS-Apps sollten keine Begrüßungsbildschirme verwenden. –

1

Eine andere Lösung wäre, die Beschleunigungsmesserdaten zu lesen und die Ausrichtung selbst zu bestimmen.

-2

Es klingt, als ob Sie das Startbild nicht so verwenden, wie es Apple in der iOS HIG empfiehlt. Es ruft ausdrücklich darauf hin, dass Sie es nicht als Begrüßungsbildschirm, sondern als eine Skelettversion Ihrer tatsächlichen Benutzeroberfläche verwenden sollten. Der Nettoeffekt ist, dass Ihre App gerade so viel schneller bereit ist.

Die Vorschläge, dass Sie selbst einen Begrüßungsbildschirm erstellen können, nachdem die App in viewDidAppear oder ähnlichem gestartet wurde, haben ebenfalls den grundlegenden Zweck eines Startabbilds verloren. Es ist kein Begrüßungsbildschirm. Wenn Ihre App bereit ist, lassen Sie den Benutzer damit interagieren, verschwenden Sie keine Zeit damit, einen Begrüßungsbildschirm zu zeichnen.

In meiner fünfminütigen Umfrage zu Apple-Apps und Apps von Drittanbietern zeigte jeder ein Hochformat-Startbild, lud die Hochformatversion der Benutzeroberfläche ein und rotierte dann in Querformat. Es ist schon eine Weile her, seit ich auf iOS programmiert habe, aber ich denke, das spiegelt die Reihenfolge der Methodenaufrufe wider - zuerst wird Ihre App gestartet, dann wird gesagt, dass sie sich in eine bestimmte Richtung drehen soll.

Es könnte eine schöne Erweiterung Antrag stellen, um mit Apple sein, obwohl :)

+0

Vielen Dank für die dokumentierte Antwort. Ich habe jedoch eine andere Meinung. Apple empfiehlt, dass Sie eine Skelettversion Ihrer tatsächlichen Benutzeroberfläche verwenden sollten, um den Benutzer zu überlisten, dass die App schneller geladen wird als sie tatsächlich ist. Wenn Sie diesen kleinen Trick hinter sich lassen, verwenden die meisten Apps einen Begrüßungsbildschirm mit dem Firmenlogo oder etwas attraktives, um die Aufmerksamkeit des Benutzers auf sich zu ziehen, bis die App fertig ist. –

+0

Ich möchte den Übergang zwischen dem Begrüßungsbildschirm und meiner Benutzeroberfläche glatter machen (einen Effekt hinzufügen) und so die Benutzerfreundlichkeit verbessern. Der Übergang würde höchstens 0,3-0,5 Sekunden dauern, daher glaube ich nicht, dass der Benutzer das als Zeitverschwendung empfinden würde. –

3

, um dieses Problem bin ich der Ansicht Splash-Bild innerhalb eines View-Controller, die beide Orientierungen erlaubt installiert zu bekommen. Obwohl das Gerät beim Start eine falsche Ausrichtung gemeldet hat, scheint der View-Controller den richtigen zu bekommen.

-1

Es gibt sicherlich Zeiten, in denen Sie vom Lade-Image zu etwas anderem wechseln möchten, bevor der Benutzer die Kontrolle über Ihre App erlangt. Wenn Ihre App nicht wirklich einfach ist, reicht es wahrscheinlich nicht aus, das Bild auf die Zielseite zu laden. Wenn du jemals eine große App entwickelst, wirst du das auf jeden Fall tun wollen, um den Fortschritt während des Setups anzuzeigen, xibs laden, usw. Wenn eine App mehrere Sekunden braucht, um ohne Feedback vorbereitet zu werden, werden die Benutzer es hassen. IMO, es ist auch nichts falsch mit einem schönen Übergangseffekt.Fast Niemand verwendet Ladebildschirme wie Apple es vorschlägt. Ich weiß nicht, welche Apps, die Sie angeschaut haben, die Lademasken vom Typ "leere UI" zeigten, die sie vorschlagen. Verdammt, selbst Apple macht das nicht, außer in ihrem Beispielcode, und keiner meiner Kunden würde das akzeptabel finden. Es ist ein lahmes Design.

+1

Eh .. das war als Antwort auf Alex. – Dave

1

Um zu wissen, was ist die Ausrichtung (Ausrichtung funktioniert nicht, bis Benutzer das Gerät drehen) intercept shouldAutorotateToInterfaceOrientation von Ihrem View Controller, es heißt am Start, und Sie kennen Ihre Geräteausrichtung.

-1

Nur die erste dem Fenster hinzugefügte Ansicht wird vom Betriebssystem gedreht. Wenn Sie also möchten, dass sich Ihr Begrüßungsbildschirm automatisch dreht UND Ihre Hauptansicht drehbar ist, fügen Sie sie einfach als untergeordnetes Element dieser Ansicht hinzu.

Hier ist mein Code für Verblassen die entsprechende Splash-Screen Bild aus:

// Determine which launch image file 
NSString * launchImageName = @"Default.png"; 
if (UI_USER_INTERFACE_IDIOM() == UIUserInterfaceIdiomPad) { 
    if (UIDeviceOrientationIsPortrait([[UIDevice currentDevice] orientation])) { 
     launchImageName = @"Default-Portrait.png"; 
    } else { 
     launchImageName = @"Default-Landscape.png"; 
    } 
} 

// Create a fade out effect 
UIImageView* whiteoutView = [[[UIImageView alloc] initWithFrame:self.window.frame] autorelease]; 
whiteoutView.autoresizingMask = UIViewAutoresizingFlexibleWidth | UIViewAutoresizingFlexibleHeight; 
whiteoutView.autoresizesSubviews = YES;   
whiteoutView.image = [UIImage imageNamed:launchImageName]; 
[[[self.window subviews] objectAtIndex:0] addSubview:whiteoutView]; 

[UIView beginAnimations:nil context:nil]; 
[UIView setAnimationDuration:0.5]; 
whiteoutView.alpha = 0.0; 
[UIView commitAnimations]; 

Hinweis: Sie werden aktualisieren müssen es hallo-res-Bildschirme zu unterstützen.

+2

Funktioniert nicht, [UIDevice currentDevice] Ausrichtung] ist "undefined" für den Startbildschirm. –

5

Ich hatte Probleme damit und ich löste es, indem ich ein Bild 1024x1024 machte und den contentMode der UIImageView auf UIViewContentModeTop setzte, dann die Autoresierung des linken und rechten Randes verwendete. Solange die Standardbilder für Hoch- und Querformat dasselbe Layout haben, funktioniert das auch.

Nur um zu klären ist hier, was ich verwendet:

bgView = [[UIImageView alloc] initWithImage:[UIImage imageNamed:SplashImage]]; 
bgView.autoresizingMask = UIViewAutoresizingFlexibleLeftMargin | UIViewAutoresizingFlexibleRightMargin; 
bgView.contentMode = UIViewContentModeTop; 
+0

Großartige Idee - ich habe das auch getan. –

3

Sie können UIApplication statusBarOrientation wie folgt verwenden:

if (UIDeviceOrientationIsLandscape([[UIApplication sharedApplication] statusBarOrientation])) 
    { 
    // landscape code 
    } 
else 
    { 
    // portrait code 
    } 
Verwandte Themen