问题:
有没有办法在Xcode 6项目的LaunchScreen.xib文件中为iOS 8.1+部署目标设置动画?
的上下文:
我希望制作简单的动画来传达活动,或者在用户等待时为用户分心......
的实施例
答案 0 :(得分:26)
不。
启动图像仅在用户选择启动应用程序和应用程序实际开始运行之间的时间段内显示。在此期间,您的应用无法执行任何操作,例如执行动画 - 它尚未运行。启动图像只是一个静态图像,经过精心设计,可以让用户感觉应用程序已快速准备就绪。
(一些开发人员忽略the HIG并使用启动图像提供启动画面,有时会使用动画演示文稿。但在这些情况下,启动画面仍然是静态图像,动画发生在应用程序之后开始运行 - 它只是运行的应用程序绘制的第一帧动画与静态启动图像的外观相匹配。)
此行为并未因iOS 8中的LaunchScreen.xib功能而发生变化 - 仅在您的应用实际运行之前仍然显示,因此它仍然是静态图像。 LaunchScreen.xib功能为您提供的功能是能够自适应地为许多不同的设备尺寸和样式生成启动图像,而无需在您的应用程序包中单独设计,渲染和发送每个尺寸/方向等的不同图像。
如果您的应用在获得控制权时实际上还没准备好使用,请考虑一下" loading"您当时正在做的任务确实需要立即完成,或者如果您可以让用户立即开始做一些事情并在后台线程上进行更多设置工作或将其推迟到实际需要
答案 1 :(得分:13)
我不经常使用闪屏,但是当我这样做时,我希望它们像书一样打开。
说实话,我不是大屏幕的忠实粉丝,甚至Apple建议使用default.png来显示应用程序的控件(没有文本):
显示与应用程序的第一个屏幕非常相似的启动图像。这种做法减少了应用程序的感知启动时间。
避免显示“关于”窗口或启动画面。通常,尽量避免提供任何类型的启动体验,以防止人们立即使用您的应用程序。
来自HIG指南的
然而,有些人喜欢它们,特别是一个应用程序有一个很好的实现启动画面 - 路径2.0。当你打开Path时,你会在Apple亚麻质地的红色版本上看到他们的徽标,这些徽标像书本一样打开(或者就像Path认为的那样是日记)。
您可以在此处获取此项目的来源:https://github.com/jaysonlane/OpenBook
在我们开始之前,让我先用免责声明作为序言:我对Cocoa中的动画非常陌生,所以请耐心等待。如果您发现不必要或效率低下的代码,请发表评论,我会整理一下。
如果您还没有看过这个动画,请跳过应用程序商店并选择一个副本以查看我们要完成的任务。我已经创建了一个默认的png,我们可以巧妙地使用标题为Math(就像一本打开的数学书,对吧?)你可以在这里(视网膜)和这里下载。
首先,让我解释一下我们将要做的事情背后的“诡计”:我们将使用正常的默认启动系统来显示我们的default.png。在App Delegate中,一旦应用程序完成启动,我们将在我们对同一default.png的视图之上创建一个UIImageView。然后我们将为UIImageView设置动画,旋转打开以显示我们的视图。
让我们走吧:
创建一个新项目,我使用单个视图模板创建了一个项目,但这将适用于任何事情。继续并将default.png和default@2x.png设置为提供的图像。您可以通过单击左侧导航窗格中的项目,单击目标并向下滚动以启动图像来执行此操作:
打开你的AppDelegate.m并将以下代码添加到你的应用程序didFinishLaunching或application didFinishLaunchingWithOptions函数:
//1. add the image to the front of the view...
UIImageView *splashImage = [[UIImageView alloc] initWithFrame:CGRectMake(0, 0, 320, 480)];
[splashImage setImage: [UIImage imageNamed:@"Default"]];
[self.window addSubview:splashImage];
[self.window bringSubviewToFront:splashImage];
//2. set an anchor point on the image view so it opens from the left
splashImage.layer.anchorPoint = CGPointMake(0, 0.5);
//reset the image view frame
splashImage.frame = CGRectMake(0, 0, 320, 480);
//3. animate the open
[UIView animateWithDuration:1.0
delay:0.6
options:(UIViewAnimationCurveEaseOut)
animations:^{
splashImage.layer.transform = CATransform3DRotate(CATransform3DIdentity, -M_PI_2, 0, 1, 0);
} completion:^(BOOL finished){
//remove that imageview from the view
[splashImage removeFromSuperview];
}];
这里发生了三件事......
1)我们创建一个新的UIImageView并将其添加到视图的顶部 2)我们在图像的左侧设置一个锚点,使其从左侧打开,然后将帧重置为视图的完整大小 3)我们动画UIImageView并在完成时将其从视图中删除
就是这样,就这么简单。
来源:http://jaysonlane.net/tech-blog/2012/03/path-2-0-style-animated-splash-screen-default-png/
答案 2 :(得分:0)
您可以创建LaunchScreen.xib,然后创建一个完美的副本,您可以将代码放在其上,并拥有一个类似LaunchScreenAnimator的类,您可以从您的委托中调用它,并且有一个代表在动画结束时告诉您
- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions
{
self.window = [[UIWindow alloc] initWithFrame:[[UIScreen mainScreen] bounds]];
LaunchScreenAnimator *la=[LaunchScreenAnimator createWithDelegate:self];
self.window.rootViewController=la;
[self.window makeKeyAndVisible];
[la startAnimation];
return YES;
}
-(void) splashAnimationFinished:(LaunchScreenAnimator*)view
{
[self startWithDashboardWindow]; // replace the current rootViewController with whatever you want
}