在 4 英寸 iPhone 屏幕上淡出启动图像
Posted
技术标签:
【中文标题】在 4 英寸 iPhone 屏幕上淡出启动图像【英文标题】:Fade out Launch Image on 4 Inch iPhone screen 【发布时间】:2012-10-20 15:06:46 【问题描述】:在启动时,我正在从启动图像淡入应用程序的界面。为此,我添加了一个带有“Default.png”的UIImageView
,并在makeKeyAndVisible
之前为其alpha 设置动画。
Default.png 是否应该始终返回特定于设备(或特定于分辨率)的启动图像版本?或者我应该检查屏幕的边界和比例,以便为视网膜与非视网膜以及 3.5 与 4 英寸屏幕选择合适的?
我希望 Default.png 的行为与其他图像资源非常相似 - 在支持时使用 @2x 版本(以及 iPhone 5 上的 -568h 版本)。但我在模拟器中的实验让我不相信。运行 4 英寸模拟器,使用 3.5 英寸图像。这会导致启动图像不会延伸到屏幕底部。下面的屏幕截图显示了过渡动画。
不幸的是,我没有每个设备,因此无法确认这是否只是模拟器的一个怪癖。
简而言之,我想确定retina图像在retina设备上使用,4英寸图像在4英寸设备上使用。
【问题讨论】:
【参考方案1】:这是我的代码
- (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];
【讨论】:
谢谢 - 所以你需要手动检测更高的屏幕尺寸,不是视网膜版本吗? @BenPackard 是的,我找不到更好的方法。如果你找到了,请告诉我 当我这样做时,它有时会显示黑屏。但不是每次。 50% 的时间。你知道为什么吗? @Diwann 我相信你忘了删除默认的黑色启动图像(在 Supporting Files/Default.png 下找到)【参考方案2】:为了记录,这是我的@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];
【讨论】:
很好的解决方案本。我有一个其他人可能不得不做的补充,就是将 imageview 的 y 坐标调整 -20 以考虑状态栏的高度。【参考方案3】:答案是您必须显式加载设备特定版本的图像。这是自定义动画,您不能依赖 Apple 的默认加载行为来实现您想要的。
首先确保您的配置正确,并且设备上显示了正确的默认加载图像(不要太相信模拟器(我什至从不使用模拟器,它有这么多错误))
然后就像之前的评论者建议的那样,用你的图片加载一个视图。
请记住,默认图像将由 cocoa 框架加载和显示。您所能做的就是在之后显示一个视图,如果您尝试对网络上的负载进行一些公认的聪明黑客攻击,您会发现它们总是会以某种方式中断。
如果您需要在 iPhone 5 上设置动画全屏图像,您需要为设备显式加载该图像。
【讨论】:
【参考方案4】:是的,您提供 Default.png 和 Default@2x.png,您甚至必须为 iPhone 5 4" 屏幕提供 Default-568h@2x.png。
您的应用将根据设备使用标准、视网膜或大视网膜,但请注意,Apple 不鼓励将默认启动图像用作任何介绍动画序列。
您可以使用的技巧是在应用启动时添加一个图像视图作为应用程序的第一个屏幕并立即将其淡出,这会给用户一种启动图像正在淡出的印象,即使启动图像是消失了,取而代之的是你的图像视图。
查看Apple Custom Icon and Image Creation Guidelines的启动图片部分:
提供启动图像以改善用户体验。
避免使用您的发布图片作为提供的机会:
• “应用程序入口体验”,例如闪屏
• 关于窗口
• 品牌元素,除非它们是您应用的第一个静态部分 screen 由于用户可能会频繁地在应用程序之间切换,您 应该尽一切努力将启动时间缩短到最低限度,并且您 应该设计一个淡化体验的启动图像,而不是 引起注意。
【讨论】:
也许我不清楚。我已经提供了这些图像并且动画已经正常工作。在模拟器中,虽然没有使用我的 -568h 版本。我试图理解为什么。另外,我没有将它用于一种介绍或启动屏幕 - 只是从 Default.png 淡入我的界面。 你使用的是 iPhone 4" 模拟器? 在模拟器中,我正在使用 iPhone、iPhone Retina 3.5 英寸和 iPhone Retina 4 英寸进行测试。 4" 是给我带来麻烦的那个 - Default.png 似乎指向较小的图像。Default-568h@2x 文件是正确的。我可以告诉这一点,因为没有动画,启动图像看起来很好。跨度> 也许你的问题的一些截图会有所帮助以上是关于在 4 英寸 iPhone 屏幕上淡出启动图像的主要内容,如果未能解决你的问题,请参考以下文章
如何在 3.5 英寸和 4 英寸 iPhone 屏幕上显示图像时如何居中?
如何为 iPhone 6 / 6 Plus 仅横向应用程序创建启动图像?
无法在 iPhone 6.0 模拟器 Retina 4 英寸上全屏启动我的应用程序
xcode 5.0.1 中 iphone 4 的启动画面没有改变