启动时,我正在从启动图像淡入应用程序的界面。要实现这一目标,我要在UIImageView
之前添加一个makeKeyAndVisible
和“Default.png”,并为其设置动画。
Default.png是否应始终返回启动映像的特定于设备(或特定于分辨率)的版本?或者我应该检查屏幕的界限和比例来选择适合视网膜与非视网膜以及3.5英寸和4英寸屏幕的屏幕?
我希望Default.png的行为与其他图像资源非常相似 - 支持时使用@ 2x版本(以及iPhone 5上的-568h版本)。但是我在模拟器中的实验让我相信不然。运行4英寸模拟器,使用3.5英寸图像。这会导致飞溅图像不会延伸到屏幕底部。下面的屏幕截图显示了动画中期过渡。
不幸的是我没有每台设备,因此无法确认这是否只是模拟器的一个怪癖。
简而言之,我想确保在视网膜设备上使用视网膜图像,并在4英寸设备上使用4英寸图像。
答案 0 :(得分: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];
}
答案 1 :(得分: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];
答案 2 :(得分:2)
答案是您必须明确加载图像的设备特定版本。这是自定义动画,你无法依靠Apple的默认任何加载行为来实现你想要的。
首先确保你配置正确,并在设备上显示正确的默认加载图像(不要太信任模拟器(也就是我从来没有使用模拟器那么多的错误))
然后,之前的评论者建议使用您的图片加载视图。
请记住,默认图像将由cocoa框架加载和显示。你所能做的就是随后展示一个视图,如果你尝试用网上的负载做一些公认的聪明的黑客,你会发现它们总会以某种方式破坏。
如果您需要在iPhone 5上制作动画或不动画的全屏图像,则需要为所有设备明确加载该图像。
答案 3 :(得分:0)
是的,你提供Default.png和Default@2x.png,你甚至需要为iPhone 5 4“屏幕提供Default-568h@2x.png。
您的应用程序将根据设备使用标准,视网膜或大视网膜,但请注意Apple不鼓励使用默认启动图像作为任何介绍动画序列。
您可以使用的技巧是将图像视图添加为应用程序启动时的第一个屏幕并立即将其淡出,这会让用户感觉即使启动图像是启动图像也会淡出走了,这是你的图像视图接管。
查看Apple Custom Icon and Image Creation Guidelines的启动图片部分:
提供启动图像以改善用户体验。
避免使用您的启动图片作为提供的机会:
•“应用输入体验”,例如启动画面
•关于窗口
•品牌元素,除非它们是您应用的第一个静态部分 屏幕因为用户可能经常在应用程序之间切换,所以 应该尽一切努力将发射时间降到最低,和你一起 应该设计一个低于体验的发布图像而不是 提请注意它。