18

こんにちは私はアプリを持っていて、デフォルトのスプラッシュ画面用に2つの*.pngを持っています:

Default-Landscape.pngDefault-Portrait.png

私が欲しいのは、アプリがロードされて準備ができたら、このデフォルトのスプラッシュ画面をアニメーション化することです。

これを実現するために、私は通常、UIImageViewにdefault-landscapeまたはdefault-portrait(デバイスの向きに応じて)を表示し、一定時間画面に表示してからアニメーション化します。

私の問題は、私が電話をかける[[UIDevice currentDevice] orientation]

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

答えは、私が明らかに横向きに持っていても、デバイスは常に縦向きであるということです。シミュレーターとデバイスでもこれを試しましたが、動作は同じです。

誰かがこれまたは多分他のアプローチの修正を知っていますか?

ありがとう!

4

9 に答える 9

5

私はこれに問題があり、1 つの画像を 1024x1024 にして、UIImageView の contentMode を UIViewContentModeTop に設定し、左右の余白の自動サイズ変更を使用して解決しました。縦向きと横向きのデフォルト画像が同じレイアウトである限り、これはうまく機能します。

明確にするために、私が使用したものは次のとおりです。

bgView = [[UIImageView alloc] initWithImage:[UIImage imageNamed:SplashImage]];
bgView.autoresizingMask = UIViewAutoresizingFlexibleLeftMargin | UIViewAutoresizingFlexibleRightMargin;
bgView.contentMode = UIViewContentModeTop;
于 2011-08-08T10:08:22.180 に答える
3

UIApplicationstatusBarOrientationは次のように使用できます。

if ( UIDeviceOrientationIsLandscape( [[UIApplication sharedApplication] statusBarOrientation] ))
    {
    // landscape code
    }
else
    {
    // portrait code
    }
于 2012-11-20T07:00:19.787 に答える
3

この問題を回避するために、両方の向きを許可するビュー コントローラー内にスプラッシュ イメージ ビューをインストールしました。デバイスは起動時に間違った方向を報告しましたが、View Controller は正しい方向を取得しているようです。

于 2010-08-26T18:24:43.103 に答える
1

開始時にViewControllerの方向(UIDeviceユーザーがデバイスを回転させるまで方向は機能しません)shouldAutorotateToInterfaceOrientationを知るために、開始時に呼び出され、デバイスの方向がわかります。

于 2011-01-13T00:36:40.487 に答える
1

おそらく、開始時に黒い背景の空白のビューを表示し、[[UIDevice currentDevice] orientation]このビューに配置してviewDidAppear、そこからスプラッシュ スクリーンを開始できますか?

于 2010-08-13T14:38:07.280 に答える
1

もう 1 つの解決策は、加速度計のデータを読み取って自分で方向を判断することです。

于 2010-08-13T19:38:52.223 に答える
-1

ユーザーがアプリを制御できるようになる前に、読み込み中の画像から別の画像に移行したい場合があります。アプリが非常に単純でない限り、画像の読み込みからランディング ページへの移動は、アプリのエクスペリエンスを本当に悪くしない限り、おそらく十分ではありません。大規模なアプリを開発する場合は、セットアップ中や xib のロード中などに進行状況を表示するために、間違いなくそうしたいと思うでしょう。アプリの準備に数秒かかり、フィードバックがない場合、ユーザーはそれを嫌うでしょう。IMO、素敵なトランジション効果にも問題はありません。ほとんど誰もいないAppleが提案する方法でロード画面を使用します。どのアプリを見て、「空の UI」タイプの読み込み画面が表示されたかはわかりません。なんてこった、Apple でさえ、サンプル コードを除いてはそうしないし、私のクライアントの誰もそれを受け入れられないだろう. だめなデザインです。

于 2010-11-12T01:07:45.573 に答える
-1

ウィンドウに追加された最初のビューのみが OS によって回転されます。したがって、スプラッシュ スクリーンを自動的に回転させ、メイン ビューを回転可能にしたい場合は、それをそのビューの子として追加するだけです。

適切なスプラッシュ スクリーン イメージをフェードアウトするためのコードを次に示します。

    // 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];

注: 高解像度の画面をサポートするには、更新する必要があります。

于 2011-02-22T01:42:04.017 に答える
-2

Apple がiOS HIGで推奨する方法で起動イメージを使用していないようです。スプラッシュ スクリーンとして使用するのではなく、実際の UI のスケルトン バージョンとして使用する必要があることを明確に示しています。最終的な効果としては、アプリの準備がそれだけ速く行われるように見えるということです。

アプリが viewDidAppear などで起動した後に自分でスプラッシュ スクリーンを描画できるという提案にも、起動イメージの基本的な目的がありません。スプラッシュ画面ではありません。アプリの準備ができたら、ユーザーがアプリを操作できるようにします。スプラッシュ スクリーンの描画に時間を無駄にしないでください。

Apple アプリとサードパーティ アプリに関する 5 分間の調査によると、全員が縦向きの起動イメージを表示し、縦向きバージョンの UI をロードしてから横向きに回転しました。iOS でのプログラミングからしばらく経ちましたが、これはメソッド呼び出しの順序を反映していると思います。最初にアプリが起動され、次に特定の向きに回転するように指示されます。

ただし、Appleに提出するのは素晴らしい機能強化リクエストかもしれません:)

于 2010-08-13T21:01:11.433 に答える