4

起動時に、起動イメージからアプリケーションのインターフェイスにフェードします。これを実現するために、UIImageView「Default.png」を使用して を追加し、 の直前にそのアルファをアニメーション化していますmakeKeyAndVisible

Default.png は常に起動イメージのデバイス固有 (または解像度固有) のバージョンを返す必要がありますか? または、画面の境界とスケールをチェックして、網膜と非網膜、および 3.5 と 4 インチの画面に適したものを選択する必要がありますか?

私は、Default.png が他の画像リソースと同じように動作することを期待していました。サポートされている場合は @2x バージョンを使用します (iPhone 5 では -568h バージョンを使用します)。しかし、シミュレーターでの私の実験は、そうではないことを信じさせてくれます。4 インチ シミュレータを実行すると、3.5 インチのイメージが使用されます。これにより、画面の下部まで拡張されないスプラッシュ イメージが生成されます。以下のスクリーンショットは、アニメーションの途中での遷移を示しています。

ここに画像の説明を入力

残念ながら、私は各デバイスを持っていないため、これがシミュレーターの癖にすぎないかどうかを確認できませんでした.

つまり、Retina デバイスでは Retina イメージが使用され、4 インチ デバイスでは 4 インチ イメージが使用されるようにしたいと考えています。

4

4 に答える 4

6

これは私のコードです

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

    [self.window makeKeyAndVisible];

    [self _startLaunchAnimation];

    return YES;
}

- (void)_launchAnimation {
    CGFloat screenHeight = [[UIScreen mainScreen] bounds].size.height;
    UIImageView *launchImageView = (UIImageView*)[self.window viewWithTag:1000];

    [UIView beginAnimations:nil context:nil];
    [UIView setAnimationDuration:1.0];
    [UIView setAnimationTransition:UIViewAnimationTransitionNone
                           forView:self.window
                             cache:YES];
    [UIView setAnimationDelegate:self];
    [UIView setAnimationDidStopSelector:@selector(startupAnimationDone:finished:context:)];
    [launchImageView setAlpha:0.0];
    [launchImageView setFrame:CGRectMake(-60.0f, 0.0f, 320.0f, screenHeight)];
    [UIView commitAnimations];
}

- (void)_startLaunchAnimation {
    CGFloat screenHeight = [[UIScreen mainScreen] bounds].size.height;
    NSString *imageName = nil;
    if (screenHeight == 568.0f) {
        imageName = @"Default-568h.png";
    } else {
        imageName = @"Default.png";
    }

    UIImage *image = [UIImage imageNamed:imageName];
    UIImageView *launchImageView = [[UIImageView alloc] initWithImage:image];
    [launchImageView setTag:1000];
    [self.window addSubview:launchImageView];

    [NSTimer scheduledTimerWithTimeInterval:2.0
                                     target:self
                                   selector:@selector(_launchAnimation)
                                   userInfo:nil
                                    repeats:NO];
}
于 2012-10-20T16:00:41.937 に答える
4

記録のために、これは@agassi_yzhのソリューションの私のバージョンです:

//fade from the launch image to the interface
CGFloat screenHeight = [UIScreen mainScreen].bounds.size.height;    
NSString *imageFile = (screenHeight == 568.0f) ? @"Default-568h.png" : @"Default.png";
UIImageView *splash = [[UIImageView alloc] initWithImage:[UIImage imageNamed:imageFile]];

[self.window.rootViewController.view addSubview:splash];

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

//display the main window
[self.window makeKeyAndVisible];
于 2012-10-20T16:10:59.503 に答える
2

答えは、デバイス固有のバージョンのイメージを明示的にロードする必要があるということです。これはカスタム アニメーションであり、Apple のデフォルトの読み込み動作に依存して目的を達成することはできません。

最初に、適切に構成されていることと、正しいデフォルトのロード イメージがデバイスに表示されていることを確認します (シミュレーターをあまり信頼しないでください (別名、シミュレーターを使用することさえありません)。バグが多いためです)。

そして、以前のコメンターが提案したように、画像を含むビューをロードします。

デフォルトの画像は、ココア フレームワークによって読み込まれ、表示されることに注意してください。できることは後でビューを表示することだけです。ウェブ上にあるオンロードで確かに巧妙なハックをいくつか試してみると、それらが常に何らかの形で壊れることがわかります。

iPhone 5 でアニメーション化されたフルスクリーン画像が必要な場合、または iPhone 5 ではない場合は、その画像をデバイス用に明示的にロードする必要があります。

于 2012-10-20T16:12:05.950 に答える
0

はい、Default.pngとDefault@2x.pngを提供します。また、iPhone 54"画面にはDefault-568h@2x.pngを提供する必要があります。

アプリはデバイスに応じて標準、網膜、または大きな網膜を使用しますが、Appleはイントロアニメーションシーケンスとしてデフォルトの起動画像を使用しないことに注意してください。

使用できる秘訣は、アプリの起動時にアプリの最初の画面として画像ビューを追加し、すぐにフェードアウトすることです。これにより、起動画像が消えても起動画像がフェードアウトしているような印象をユーザーに与えることができます。それはあなたのイメージビューが引き継ぐことです。

Appleカスタムアイコンと画像作成ガイドラインの起動画像セクションを見てください。

ユーザーエクスペリエンスを向上させるために起動イメージを提供します。

以下を提供する機会として起動イメージを使用することは避けてください。

•スプラッシュ画面などの「アプリ入力エクスペリエンス」

•Aboutウィンドウ

•ブランディング要素(アプリの最初の画面の静的な部分でない限り)ユーザーはアプリを頻繁に切り替える可能性があるため、起動時間を最小限に抑えるようにあらゆる努力を払い、エクスペリエンスを軽視する起動イメージを設計する必要がありますそれに注意を引くよりも。

于 2012-10-20T15:19:23.827 に答える