我可以为图像制作动画吗iOS8 LaunchScreen.xib
Posted
技术标签:
【中文标题】我可以为图像制作动画吗iOS8 LaunchScreen.xib【英文标题】:Can I Animate an image iOS8 LaunchScreen.xib 【发布时间】:2015-04-21 03:25:15 【问题描述】:问题: 有没有办法在针对 ios 8.1+ 部署的 Xcode 6 项目的 LaunchScreen.xib 文件中设置动画?
背景: 我希望制作简单的动画来传达活动或在用户等待时分散他们的注意力......
示例:
加载栏 活动指示器 GIF 动画 在屏幕上移动 UIImage 旋转图像【问题讨论】:
【参考方案1】:没有。
启动图像仅在用户选择启动您的应用与您的应用实际开始运行之间的时间段内显示。在此期间,您的应用无法执行任何操作,例如执行动画——它还没有运行。启动图像只是一个静态图像,如果设计得当,它有助于给用户一种您的应用程序已快速准备就绪的印象。
(一些开发者忽略the HIG 并使用启动图像来提供启动画面,有时还带有动画演示。但在这些情况下,启动屏幕仍然是静态图像,并且一旦应用程序开始运行,动画就会发生——只是运行的应用程序绘制的第一帧动画与静态启动图像的外观相匹配。)
iOS 8 中的 LaunchScreen.xib 功能并未改变这种行为——它仍然仅在您的应用实际运行之前出现,因此它仍然是静态图像。 LaunchScreen.xib 功能让您能够自适应地为许多不同的设备尺寸和样式生成启动图像,而无需为每个尺寸/方向/等单独设计、渲染和在您的应用程序包中发送不同的图像。
如果您的应用在获得控制权时实际上还没有准备好使用,请考虑您当时正在执行的“加载”任务是否真的需要立即完成,或者您是否可以让用户开始立即做一些事情并在后台线程上做更多的设置工作,或者将其推迟到实际需要时。
【讨论】:
【参考方案2】:我不经常使用闪屏,但当我使用时,我希望它们像书一样打开。
说实话,我不是闪屏的忠实拥护者,甚至 Apple 也建议使用显示应用程序控件(无文本)的 default.png:
显示与应用程序的第一个屏幕非常相似的启动图像。这种做法减少了应用程序的感知启动时间。
避免显示关于窗口或启动画面。一般来说,尽量避免提供任何类型的启动体验,阻止人们立即使用您的应用程序。
来自 HIG 指南
但是,有些人喜欢它们,特别是一个应用程序有一个很好的实现闪屏 - Path 2.0。当您打开 Path 时,您会看到他们在红色版本的 Apple 亚麻纹理上的徽标,打开时就像一本书(或 Path 自认为的日记本)一样动画。
您可以在此处获取此项目的源代码:https://github.com/jaysonlane/OpenBook
在我们开始之前,让我先声明一下:我对 Cocoa 中的动画非常陌生,所以请耐心等待。如果您发现不必要或效率低下的代码,请发表评论,我会整理一下。
如果您还没有看过动画,请访问应用商店并获取一份副本,看看我们正在努力实现什么。我创建了一个默认 png,我们可以巧妙地使用它,标题为 Math(就像打开的数学书一样,对吗?)你可以在这里 (retina) 和这里下载。
首先,让我解释一下我们将要做的事情背后的“诡计”:我们将使用正常的默认启动系统来显示我们的 default.png。在 App Delegate 中,一旦应用程序完成启动,我们将在相同的 default.png 视图之上创建一个 UIImageView。然后,我们将为 UIImageView 设置动画,以旋转打开以显示我们的视图。
那么我们走吧:
创建一个新项目,我使用单一视图模板创建了一个,但这将适用于任何情况。继续并将您的 default.png 和 default@2x.png 设置为提供的图像。您可以通过单击左侧导航窗格中的项目来执行此操作,单击目标并向下滚动以启动图像:
打开您的 AppDelegate.m 并将以下代码添加到您的应用程序 didFinishLaunching 或应用程序 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/
【讨论】:
这是对启动画面教程的引用...我的问题特别询问是否有办法在 LaunchScreen.xib 文件中使用动画来代替 Xcode 6 的初始启动图像项目的目标是为 iOS 8.1 或更高版本的 iOS 部署...【参考方案3】:您可以创建 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
【讨论】:
以上是关于我可以为图像制作动画吗iOS8 LaunchScreen.xib的主要内容,如果未能解决你的问题,请参考以下文章
如何在xamarin android中将位图图像转换为gif?