闪屏iOS仅在模拟器上显示,大小不正确

闪屏iOS仅在模拟器上显示,大小不正确,ios,xcode,splash-screen,Ios,Xcode,Splash Screen,当我使用下面提到的代码时,我在iPhone模拟器上获得了所需的淡出启动屏幕,但图片似乎用因子2进行了缩放:我只获得了初始图片的左上角四分之一(=启动图像),缩放到全屏。启动时,在启动屏幕启动之前,启动映像本身以正确的大小显示 代码在AppDelegate中的didFinishLaunchingWithOptions中输入 // Splash screen UIImageView*imageView=[[UIImageView alloc]initWithImage:[UIImage im

当我使用下面提到的代码时,我在iPhone模拟器上获得了所需的淡出启动屏幕,但图片似乎用因子2进行了缩放:我只获得了初始图片的左上角四分之一(=启动图像),缩放到全屏。启动时,在启动屏幕启动之前,启动映像本身以正确的大小显示

代码在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];}];
此外,闪屏似乎并没有出现在设备上(iPhone4S(Retina)和iOS 6.0),只是出现在模拟器上:在iPhone上运行时,它只显示启动图像

这两个问题的原因和解决方案是什么? 提前谢谢

  • 设置imageView的框架,否则其大小与图像相同
  • 设置正确的内容模式
  • 尝试使用self.window,而不是[navigationController视图]
  • 例如:

    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];
                        }];
    });
    


    至于启动屏幕没有显示在设备上的事实:这是由于文件名不同造成的。代码中的扩展名是小写的,而实际文件的扩展名是大写的(PNG)。非常感谢!1.二,。解决了我的问题。3.对我来说不起作用:那个改变阻止了我的闪屏显示。要在淡出前添加1秒的暂停,我需要更改或添加什么?我想投赞成票,但似乎还没有赢得足够的声誉(我更新了示例代码,以演示如何在淡入淡出前添加暂停。)out@Andrey索洛维耶夫:我有一个问题,我现在正在尝试,但它对我不起作用。我对你所说的“正确的内容模式”有点困惑。我对这一点不熟悉,我应该警告你:)。但在我们说话的时候,我正在学习故事板。我在didFinishLaunchingWithOptions中实现了这一点,并将源图像更改为mines,同样在storyboard中,我制作了一个视图控制器,其中包含一个图像视图,并将图像设置为单独可见。你能帮我弄清楚什么地方可能错了/遗漏了吗?
    [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];
                        }];    
    }