0

以下のコードを使用すると、iPhoneシミュレーターでフェードアウトした目的のスプラッシュ画面が表示されますが、画像は2倍でズームされているようです。最初の画像(=起動画像)の左上の4分の1しか表示されません。フルスクリーンにズームしました。スプラッシュ画面が表示される前に、起動時に起動イメージ自体が正しいサイズで表示されます。

コードは、AppDelegateのdidFinishLaunchingWithOptionsに入力されます。

// Splash screen
    UIImageView*imageView=[[UIImageView alloc]initWithImage:[UIImage imageNamed:@"IMG_1357.png"]];
    [[navigationController view] addSubview:imageView];
    [[navigationController view] bringSubviewToFront:imageView];

    // as usual
    [self.window makeKeyAndVisible];

    //now fade out splash image
    [UIView transitionWithView:self.window duration:4.0f options:UIViewAnimationOptionTransitionNone animations:^(void){imageView.alpha=0.0f;} completion:^(BOOL finished){[imageView removeFromSuperview];}];

さらに、スプラッシュ画面はデバイス(iOS6.0を搭載したiPhone4S(Retina))には表示されず、シミュレーターにのみ表示されます。iPhoneで実行すると、起動イメージのみが表示されます。

両方の問題の原因と解決策は何でしょうか?前もって感謝します!

4

1 に答える 1

2
  1. imageViewのフレームを設定します。それ以外の場合は、画像と同じサイズになります
  2. 正しいcontentModeを設定する
  3. [navigationControllerview]の代わりにself.windowを使用してみてください

例:

UIImageView *imageView = [[UIImageView alloc] initWithImage:[UIImage imageNamed:@"IMG_1357.png"]];
imageView.contentMode = UIViewContentModeScaleAspectFill;
imageView.frame = self.window.bounds;
[self.window addSubview:imageView];
[imageView release];

[self.window makeKeyAndVisible];

//now fade out splash image
[UIView transitionWithView:self.window
                  duration:4.0f
                   options:UIViewAnimationOptionTransitionNone
                animations:^(void) {
                    imageView.alpha = 0.0f;
                }
                completion:^(BOOL finished ){
                    [imageView removeFromSuperview];
                }];

フェードアウトの前に1秒間の一時停止を追加するには、次の手順に従います。

int64_t delayInSeconds = 1.0;
dispatch_time_t popTime = dispatch_time(DISPATCH_TIME_NOW, delayInSeconds * NSEC_PER_SEC);
dispatch_after(popTime, dispatch_get_main_queue(), ^(void){
    [UIView transitionWithView:self.window
                      duration:4.0f
                       options:UIViewAnimationOptionTransitionNone
                    animations:^(void) {
                        imageView.alpha=0.0f;
                    }
                    completion:^(BOOL finished ){
                        [imageView removeFromSuperview];
                    }];
});

また

[self performSelector:@selector(_hideSplash:) withObject:imageView afterDelay:1.0];

- (void) _hideSplash:(UIView *)view
{
    [UIView transitionWithView:self.window
                      duration:4.0f
                       options:UIViewAnimationOptionTransitionNone
                    animations:^(void) {
                        view.alpha=0.0f;
                    }
                    completion:^(BOOL finished ){
                        [view removeFromSuperview];
                    }];    
}
于 2012-11-18T23:57:03.017 に答える