在4英寸iPhone屏幕上淡出发布图像

在4英寸iPhone屏幕上淡出发布图像,iphone,ios,cocoa-touch,uiimageview,ios6,Iphone,Ios,Cocoa Touch,Uiimageview,Ios6,在启动时,我将从启动映像淡入应用程序界面。为了实现这一点,我添加了一个带有“Default.png”的UIImageView,并在makeKeyAndVisible之前设置其alpha动画 Default.png是否应始终返回特定于设备(或特定于分辨率)的启动图像版本?或者我应该检查屏幕的边界和比例,为视网膜与非视网膜以及3.5与4英寸屏幕选择正确的屏幕 我希望Default.png的行为与其他图像资源非常相似——在支持时使用@2x版本(在iPhone 5上使用-568h版本)。但我在模拟器中的

在启动时,我将从启动映像淡入应用程序界面。为了实现这一点,我添加了一个带有“Default.png”的
UIImageView
,并在
makeKeyAndVisible
之前设置其alpha动画

Default.png是否应始终返回特定于设备(或特定于分辨率)的启动图像版本?或者我应该检查屏幕的边界和比例,为视网膜与非视网膜以及3.5与4英寸屏幕选择正确的屏幕

我希望Default.png的行为与其他图像资源非常相似——在支持时使用@2x版本(在iPhone 5上使用-568h版本)。但我在模拟器中的实验让我相信不是这样的。运行4英寸模拟器时,使用3.5英寸图像。这会导致飞溅图像不会延伸到屏幕底部。下面的屏幕截图显示了中间过渡动画

不幸的是,我没有每个设备,所以无法确认这是否只是模拟器的一个怪癖


简而言之,我想确保视网膜图像用于视网膜设备,4英寸图像用于4英寸设备。

是的,您提供Default.png和Default@2x.png,甚至必须提供默认值-568h@2x.png对于iPhone5 4英寸屏幕

您的应用程序将根据设备使用标准、视网膜或大视网膜,但请注意,苹果不鼓励使用默认的启动图像作为任何介绍动画序列

你可以使用的技巧是在应用程序启动时添加一个图像视图作为第一个屏幕,并立即将其淡出,这会给用户一种印象,即启动图像消失后,启动图像仍在淡出,这是由你的图像视图接管的

查看以下内容的“发布图像”部分:

提供启动映像以改善用户体验

避免将您的发布映像用作提供以下服务的机会:

•一种“应用程序进入体验”,如启动屏幕

•关于窗口

•品牌元素,除非它们是应用程序的第一个静态部分 屏幕,因为用户可能会频繁地在应用程序之间切换,所以 你应该尽一切努力把发射时间缩短到最低限度 应该设计一个淡化体验的发布形象,而不是 引起注意

这是我的密码

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

为了记录在案,这是@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];

答案是你必须显式加载特定于设备的图像版本。这是自定义动画,你不能依赖苹果的默认加载行为来实现你想要的

首先,确保配置正确,并且设备上显示了正确的默认加载映像(不要太信任模拟器(也就是说,我从来没有使用过模拟器,因为它有很多bug))

然后,正如前面的评论者所建议的,用你的图片加载一个视图

请记住,默认图像将由cocoa框架加载和显示。您所能做的就是在加载后显示视图,如果您尝试对web上的加载进行一些公认的聪明破解,您会发现它们总会以某种方式崩溃


如果你需要在iPhone 5上设置或不设置动画的全屏图像,你需要为该设备明确加载该图像,这就是它的全部内容。

可能我不清楚。我已经提供了这些图像,并且动画已经正常工作。但在模拟器中,我的-568h版本没有使用。我正在试图理解原因。此外,我不是u唱这首歌作为一种介绍或闪屏-只是为了从Default.png淡入我的界面。你正在使用iPhone 4“模拟器?在模拟器中,我用iPhone、iPhone Retina 3.5英寸和iPhone Retina 4英寸进行测试。四“是给我带来麻烦的那个-Default.png似乎指向较小的图像。默认值-568h@2x文件是正确的。我可以这么说,因为没有动画,发射图像看起来很好。也许你问题上的一些截图会有帮助谢谢-所以你需要手动检测更高的屏幕尺寸,而不是视网膜版本?@BenPackard是的,我找不到更好的方法。如果你找到,请告诉我,当我这样做时,它有时会显示一个黑屏。但不是每次。50%的时间。你知道为什么吗?@Diwann我相信你忘了删除默认的黑色启动图像(在supportingfiles/default.png下找到)这是一个很好的解决方案。我还有一个补充,其他人可能不得不这样做,就是将imageview的y坐标调整-20,以考虑状态栏的高度。